chrome.devtools.inspectedWindow

Description

使用 chrome.devtools.inspectedWindow API 与被检查窗口交互:获取被检查页面的标签 ID、在被检查窗口的上下文中评估代码、重新加载页面或获取页面内的资源列表。

Manifest Keys

必须在清单中声明以下键才能使用此 API。 devtools_page

使用 chrome.devtools.inspectedWindow 与被检查窗口交互:获取被检查页面的标签 ID,在被检查窗口的上下文中评估代码,重新加载页面,或获取页面内的资源列表。

有关使用开发人员工具 API 的一般介绍,请参阅 DevTools APIs summary

# Overview

tabId 属性提供了可用于 chrome.tabs.* API 调用的选项卡标识符。但是,请注意,出于安全考虑,chrome.tabs.* API 不会暴露给开发者工具扩展页面——您需要将选项卡 ID 传递到后台页面并从那里调用 chrome.tabs.* API 函数。

reload 方法可用于重新加载被检查的页面。此外,调用者可以指定用户代理字符串的覆盖、将在页面加载时尽早注入的脚本或强制重新加载缓存资源的选项。

使用 getResources 调用和 onResourceContent 事件获取被检查页面内的资源列表(文档、样式表、脚本、图像(documents, stylesheets, scripts, images etc)等)。Resource 类的 getContentsetContent 方法以及 onResourceContentCommitted 事件可用于支持资源内容的修改,例如,通过外部编辑器。

# Executing Code in the Inspected Window(在检查窗口中执行代码)

eval 方法为扩展提供了在被检查页面的上下文中执行 JavaScript 代码的能力。这种方法在正确的上下文中使用时很强大,但在使用不当时很危险。除非您需要 eval 方法提供的特定功能,否则请使用 tabs.executeScript 方法。

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

  • eval 方法不为被评估的代码使用一个孤立的世界,因此代码可以访问被检查窗口的 JavaScript 状态。当需要访问被检查页面的 JavaScript 状态时使用此方法。
  • 被评估代码的执行上下文包括Developer Tools console API。例如,代码可以使用inspect$0
  • 评估后的代码可能会返回一个传递给扩展回调的值。返回值必须是有效的 JSON 对象(它可能只包含原始 JavaScript 类型和对其他 JSON 对象的非循环引用)。在处理从被检查页面接收到的数据时请格外小心——执行上下文本质上是由被检查页面控制的;恶意页面可能会影响返回到扩展程序的数据。

警告

重要:由于上面解释的安全考虑,tabs.executeScript 方法是扩展访问被检查页面的 DOM 数据的首选方式,在不需要访问被检查页面的 JavaScript 状态的情况下。

请注意,一个页面可以包含多个不同的 JavaScript 执行上下文。每个框架都有自己的上下文,以及在该框架中运行内容脚本的每个扩展的附加上下文。

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

eval 方法采用可选的第二个参数,您可以使用该参数指定评估代码的上下文。此选项对象可以包含以下一个或多个键:

  • frameURL

    用于指定被检查页面的主框架以外的框架。

  • contextSecurityOrigin

    用于根据其 Web 来源(web origin)选择指定框架内的上下文。

  • useContentScriptContext

    如果为 true,则在与扩展的内容脚本相同的上下文中执行脚本。 (相当于将扩展自己的 Web 源指定为上下文安全源。)这可用于与内容脚本交换数据。

# Examples

以下代码检查被检查页面使用的 jQuery 版本:

chrome.devtools.inspectedWindow.eval(
  "jQuery.fn.jquery",
  function(result, isException) {
    if (isException) {
      console.log("the page is not using jQuery");
    } else {
      console.log("The page is using jQuery v" + result);
    }
  }
);

您可以在示例中找到更多使用开发人员工具 API 的示例Samples

Summary

Types

Resource

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

PROPERTIES

  • url

    string

    资源的 URL。

  • getContent

    function

    Gets the content of the resource.

    The getContent function looks like:

    (callback: function) => {...}
    • callback

      function

      The callback parameter looks like:

      (content: string, encoding: string) => void
      • content

        string

        资源的内容(可能已编码)。

      • encoding

        string

        如果内容未编码,则为空,否则为编码名称。目前仅支持 base64。

  • setContent

    function

    设置资源的内容。

    The setContent function looks like:

    (content: string, commit: boolean, callback?: function) => {...}
    • content

      string

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

    • commit

      boolean

      如果用户已经完成了资源的编辑,则为真,资源的新内容应该被持久化;如果这是在用户编辑资源的过程中发送的微小更改,则为 false。

    • callback

      function optional

      The callback parameter looks like:

      (error?: object) => void
      • error

        object optional

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

Properties

tabId

正在检查的选项卡的 ID。此 ID 可与 chrome.tabs.* API 一起使用。

TYPE

number

Methods

eval

chrome.devtools.inspectedWindow.eval(
  expression: string,
  options?: object,
  callback?: function,
)

在被检查页面的主框架的上下文中评估 JavaScript 表达式。该表达式的计算结果必须为符合 JSON 的对象,否则会引发异常。eval 函数可以报告评估期间发生的 DevTools 端错误或 JavaScript 异常。在任何一种情况下,回调的结果参数都是未定义的undefined。在 DevTools 端错误的情况下,isException 参数为非 null,并且 isError 设置为 true 并且 code 设置为错误代码。在 JavaScript 错误的情况下,isException 设置为 true,value 设置为抛出对象的字符串值。

PARAMETERS

  • expression

    string

    要评估的表达式。

  • options

    object optional

    options 参数可以包含一个或多个选项。

    • contextSecurityOrigin

      string optional

      在与指定源匹配的扩展的内容脚本的上下文中评估表达式。如果给定,则 contextSecurityOrigin 将覆盖 userContentScriptContext 上的“true”设置。

    • frameURL

      string optional

      如果指定,则在 URL 与指定的 iframe 匹配的 iframe 上计算表达式。默认情况下,表达式在检查页面的顶部框架中计算。

    • useContentScriptContext

      boolean optional

      在调用扩展的内容脚本的上下文中评估表达式,前提是内容脚本已经注入到检查的页面中。如果不是,则不计算表达式并调用回调,并将异常参数设置为一个对象,该对象的 isError 字段设置为 true,代码字段设置为 E_NOTFOUND

  • callback

    function optional

    The callback parameter looks like:

    (result: object, exceptionInfo: object) => void
    • result

      object

      评估结果。

    • exceptionInfo

      object

      如果在评估表达式时发生异常,则提供详细信息的对象。

      • code

        string

        设置是否在计算表达式之前在 DevTools 端发生错误。

      • description

        string

        设置是否在计算表达式之前在 DevTools 端发生错误。

      • details

        any[]

        设置是否在计算表达式之前在 DevTools 端发生错误,包含可以替换到描述字符串中的值的数组,以提供有关错误原因的更多信息。

      • isError

        boolean

        设置是否在计算表达式之前在 DevTools 端发生错误。

      • isException

        boolean

        设置评估代码是否产生未处理的异常。

      • value

        string

        设置评估代码是否产生未处理的异常。

getResources

chrome.devtools.inspectedWindow.getResources(
  callback: function,
)

从检查的页面检索资源列表。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (resources: Resource[]) => void

    • resources

      Resource[]

      页面内的资源。

reload

chrome.devtools.inspectedWindow.reload(
  reloadOptions?: object,
)

重新加载检查过的页面。

PARAMETERS

  • reloadOptions

    object optional

    • ignoreCache

      boolean optional

      当为 true 时,加载器将绕过加载事件触发之前加载load的所有检查页面资源的缓存。效果类似于在检查窗口或开发人员工具窗口中按 Ctrl+Shift+R。

    • injectedScript

      string optional

      如果指定,脚本将在加载后立即注入到检查页面的每个框架中,在任何框架的脚本之前。在后续重新加载后不会注入脚本——例如,如果用户按下 Ctrl+R。

    • userAgent

      string optional

      如果指定,该字符串将覆盖加载被检查页面的资源时发送的 User-Agent HTTP 标头的值。该字符串还将覆盖 navigator.userAgent 属性的值,该属性返回到在检查页面中运行的任何脚本。

Events

onResourceAdded

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

当新资源添加到检查页面时触发。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (resource: Resource) => void

onResourceContentCommitted

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

提交资源的新修订时触发(例如,用户在开发者工具中保存资源的编辑版本)。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (resource: Resource, content: string) => void

By.一粒技术服务.

results matching ""

    No results matching ""