This page was saved using WebZIP 7.0.3.1030 offline browser on 12/24/13 11:31:36.
Address: https://crxdoc-zh.appspot.com/extensions/devtools.inspectedWindow.html
Title: chrome.devtools.inspectedWindow - Google Chrome 扩展程序开发文档(非官方中文版)  •  Size: 52186

chrome.devtools.inspectedWindow

描述 使用 chrome.devtools.inspectedWindow API 与审查的窗口交互:获得审查页面的标签页标识符,在审查窗口的上下文中执行代码,重新加载页面,或者获取页面中所有资源的列表。
可用版本 从 Chrome 18 开始稳定支持。

使用 chrome.devtools.inspectedWindow 与审查的窗口交互:获得审查页面的标签页标识符,在审查窗口的上下文中执行代码,重新加载页面,或者获取页面中所有资源的列表。

有关使用开发者工具 API 的一般信息请参见开发者工具 API 概述

概述

tabId 属性提供标签页标识符,您可以在调用 chrome.tabs.* API 时使用。然而,值得注意的是,出于安全考虑,chrome.tabs.* API 对开发者工具扩展程序网页不可用,您需要向后台网页传递标签页标识符,并在那儿调用 chrome.tabs.* API 函数。

reload 方法可以用来重新加载审查的网页,此外,调用者还能指定替代的用户代理字符串、网页载入早期插入的脚本以及强制重新加载缓存资源的选项。

使用 getResources 方法和 onResourceContent 事件获取审查的网页中的资源列表(文档、样式表、脚本、图片等)。Resource 对象的 getContentsetContent 方法以及 onResourceContentCommitted 事件可以用来支持资源内容的修改,例如使用外部编辑器修改资源。

在审查的窗口中执行代码

eval 方法使扩展程序能够在审查页面的上下文中执行 JavaScript 代码。该方法在正确的环境下是非常有用的,但是不恰当的使用会很危险。除非您需要 eval 方法才能提供的特定功能,请使用 tabs.executeScript 方法。

如下是 evaltabs.executeScript 方法之间的主要区别:

  • eval 方法不为执行的代码使用隔离环境,所以代码可以访问审查窗口的 JavaScript 状态。当您确实需要访问审查页面的 JavaScript 状态时请使用这一方法。
  • 代码执行的上下文包括开发者工具的控制台 API。例如,代码可以使用 inspect$0
  • 执行的代码可以返回一个值,传递给扩展程序的回调函数。返回值必须为一个有效的 JSON 对象(它只能包含原始的 JavaScript 类型以及对其他 JSON 对象的非循环引用)。在处理从审查页面接收的数据时请格外小心,执行上下文本质上由审查的页面控制,恶意页面可能会影响返回给扩展程序的数据。

重要提示:出于以上解释的安全性考虑,建议扩展程序在不需要访问审查页面的 JavaScript 状态的情况下首选 tabs.executeScript 方法访问审查页面的 DOM 数据。

注意,网页可以包含几个不同的 JavaScript 执行上下文。每一个框架都有单独的上下文,在一个框架中运行的每一个具有内容脚本的扩展程序还有单独的上下文。

默认情况下,eval 方法在审查网页主框架的上下文中执行。

eval 方法的第二个参数是可选的,您可以使用它指定代码在哪个上下文中求值。该 options 对象可以包含如下属性:

frameURL
用来指定审查网页主框架以外的其他框架。
contextSecurityOrigin
用来在指定框架中根据网络来源选择上下文。
useContentScriptContext
如果为 true,在当前扩展程序内容脚本的上下文中执行脚本。(等价于指定上下文安全来源为扩展程序自己的网络来源。)这种方式可以用来与内容脚本交换数据。

例子

chrome.devtools.inspectedWindow.eval(
    "jQuery.fn.jquery",
     function(result, isException) {
       if (isException)
         console.log("该页面未使用 jQuery");
       else
         console.log("该页面使用 jQuery v" + result);
     }
);

您可以在示例中找到使用开发者工具 API 的更多例子。

chrome.devtools.inspectedWindow 参考

类型

Resource

审查的页面中的资源,例如文档、脚本或图片。

Resource 的属性

url ( string )

资源的 URL。

Resource 的方法

getContent

Resource.getContent(function callback)

获取资源内容。

参数

callback ( function )

当请求完成时接收资源内容的函数。

callback 参数应该指定一个如下形式的函数:

function(string content, string encoding) {...};

content ( string )

资源内容(可能经过编码)。

encoding ( string )

如果内容没有经过编码则为空,否则为编码名称。当前只支持 base64 编码。

setContent

Resource.setContent(string content, boolean commit, function callback)

设置资源内容。

参数

content ( string )

资源的新内容,当前只支持文本类型的资源。

commit ( boolean )

如果用户已完成资源编辑,并且资源的新内容应该保留的话则为 true。如果这只是一个次要的更改,在用户编辑资源的过程中发送则为 false。

callback ( optional function )

当请求完成时调用的函数。

如果您指定了 callback 参数,它应该指定一个如下形式的函数:

function(object error) {...};

error ( optional object )

如果资源内容成功设置则为 undefined,否则描述错误。

属性

tabId

chrome.devtools.inspectedWindow.tabId
tabId ( integer )
正在审查的标签页的标识符,这一标识符可以在 chrome.tabs.* API 中使用。

方法

eval

chrome.devtools.inspectedWindow.eval(string expression, function callback)

在审查页面主框架的上下文中对 JavaScript 表达式求值,这一表达式的结果必须是一个遵循 JSON 的对象,否则将会引发异常。

参数

expression ( string )

需要求值的表达式。

callback ( optional function )

求值完成时调用的函数。

如果您指定了 callback 参数,它应该指定一个如下形式的函数:

function(object result, boolean isException) {...};

result ( object )

求值结果。

isException ( boolean )

如果计算表达式的过程中产生异常则设为 true。

reload

chrome.devtools.inspectedWindow.reload(object reloadOptions)

重新载入审查的页面。

参数

reloadOptions ( optional object )

属性

ignoreCache ( optional boolean )

当设置为 true 时,载入器将忽略所有在 load 事件产生前载入的审查页面资源的缓存,效果类似于在审查的窗口或开发者工具窗口中按下 Ctrl+Shift+R。

userAgent ( optional string )

如果指定的话,这一字符串会替代载入审查页面的资源时发送的 HTTP 头信息中的 User-Agent 值,这一字符串也会替代返回给审查的页面中运行的所有脚本的 naviagtor.userAgent 属性。

injectedScript ( optional string )

如果指定的话,这一脚本将会在刚开始载入时,在任何框架的脚本之前插入至审查页面的每一个框架。这一脚本在以后的重新载入中不会插入——例如,如果用户按下 Ctrl+R。

getResources

chrome.devtools.inspectedWindow.getResources(function callback)

从审查的页面中获取所有资源的列表。

参数

callback ( function )

请求完成时接收资源列表的函数。

callback 参数应该指定一个如下形式的函数:

function(array of Resource resources) {...};

resources ( array of Resource )

页面中的资源。

事件

onResourceAdded

当新资源添加到审查的页面中时产生。

addListener

chrome.devtools.inspectedWindow.onResourceAdded.addListener(function callback)

参数

callback ( function )

callback 参数应该指定一个如下形式的函数:

function(Resource resource) {...};

resource ( Resource )

onResourceContentCommitted

当新版本的资源提交(例如用户在开发者工具中保存了某一资源编辑之后的版本)时产生。

addListener

chrome.devtools.inspectedWindow.onResourceContentCommitted.addListener(function callback)

参数

callback ( function )

callback 参数应该指定一个如下形式的函数:

function(Resource resource, string content) {...};

resource ( Resource )

content ( string )

资源的新内容。