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
对象的 getContent
和 setContent
方法以及 onResourceContentCommitted
事件可以用来支持资源内容的修改,例如使用外部编辑器修改资源。
在审查的窗口中执行代码
eval
方法使扩展程序能够在审查页面的上下文中执行
JavaScript
代码。该方法在正确的环境下是非常有用的,但是不恰当的使用会很危险。除非您需要
eval
方法才能提供的特定功能,请使用
tabs.executeScript 方法。
如下是 eval
与 tabs.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
的更多例子。
类型
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) {...};
-
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) {...};
事件
onResourceAdded
当新资源添加到审查的页面中时产生。
addListener
chrome.devtools.inspectedWindow.onResourceAdded.addListener(function callback)
参数
callback 参数应该指定一个如下形式的函数:
function(Resource resource) {...};
onResourceContentCommitted
当新版本的资源提交(例如用户在开发者工具中保存了某一资源编辑之后的版本)时产生。
addListener
chrome.devtools.inspectedWindow.onResourceContentCommitted.addListener(function callback)
参数
callback 参数应该指定一个如下形式的函数:
function(Resource resource, string content) {...};
-
content
(
string
)
-
资源的新内容。