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 | |
属性 | |
tabId | |
方法 | |
eval −
chrome.devtools.inspectedWindow.eval(string expression, object options, function callback)
| |
reload −
chrome.devtools.inspectedWindow.reload(object reloadOptions)
| |
getResources −
chrome.devtools.inspectedWindow.getResources(function callback)
| |
事件 | |
onResourceAdded | |
onResourceContentCommitted |
类型
Resource
属性 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
string | url |
资源的 URL。 |
|||||||||||||
方法 | |||||||||||||||
getContent
Resource.getContent(function callback)
获取资源内容。
| |||||||||||||||
setContent
Resource.setContent(string content, boolean commit, function callback)
设置资源内容。
|
属性
integer | chrome.devtools.inspectedWindow.tabId |
正在审查的标签页的标识符,这一标识符可以在 chrome.tabs.* API 中使用。 |
方法
eval
chrome.devtools.inspectedWindow.eval(string expression, object options, function callback)
在审查页面主框架的上下文中对 JavaScript 表达式求值,表达式的结果必须是一个可转换为 JSON 的对象,否则将会引发异常。eval 函数可能会报告开发者工具中的错误,也可能是求值过程中产生的 JavaScript 异常。无论是哪种情况,回调函数的 result
参数均为 undefined
。如果是开发者工具中的错误,isException
参数就不为 null,并包含 isError
属性,设置为 true,还有 code
属性,设置为错误码。如果是 JavaScript 错误,isException
设置为 true,value
设置为抛出的异常对象的字符串值。
参数 | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
string | expression |
需要求值的表达式。 |
||||||||||||||||||||||||
object | (可选) options |
从 Chrome 38 开始支持。警告:目前为 Dev 分支。了解更多内容 options 参数可以包含一个或多个选项。
|
||||||||||||||||||||||||
function | (可选) callback |
求值完成时调用的函数。 如果您指定了 callback 参数,它应该是一个如下形式的函数: function(object result, object exceptionInfo) {...};
|
reload
chrome.devtools.inspectedWindow.reload(object reloadOptions)
重新载入审查的页面。
参数 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
object | (可选) reloadOptions |
|
getResources
chrome.devtools.inspectedWindow.getResources(function callback)
事件
onResourceAdded
onResourceContentCommitted
示例扩展程序
- Chrome Preprocessor Example – Simple hello-world example for chrome.devtools.inspectedWindow.reload() using preprocessor.