我正在尝试编写一个为 Chrome devtools 添加功能的扩展程序。
根据 devtools 文档,它说 devtools 中的页面支持非常有限的 api。任何不支持的 API 都可以通过后台页面访问,就像 contentscripts 一样。
这是相关的文档片段:
tabId 属性提供您可以与 chrome.tabs.* API 调用一起使用的选项卡标识符。但是,请注意,出于安全考虑,chrome.tabs.* API 不会暴露给开发者工具扩展页面——您需要将标签 ID 传递到后台页面并从那里调用 chrome.tabs.* API 函数。
这是源网址:http: //developer.chrome.com/extensions/devtools.inspectedWindow.html
但是,当我尝试这样做时,我在控制台中收到以下错误:
uncaught Error: "getBackgroundPage" can only be used in extension processes. See the content scripts documentation for more details.
这是我的 devtools.js 脚本中的代码:
chrome.extension.getBackgroundPage().getLocation();
我究竟做错了什么?
编辑
我应该首先描述我的场景,并展示我是如何实现它的。
我想要做的是在与网页相关的 devtools 面板中显示额外的数据。为了获取该数据,我需要在与正在调试的页面相同的会话中发送一个 HTTP 请求,因为它需要身份验证。
用例:
用户浏览到特定的 URL。他已通过该站点的身份验证。然后他调用 devtools。devtools 面板打开,并显示一个新面板,其中包含与页面相关的额外数据。
执行:
1) DevTools 脚本找出被检查页面的 url。如果 url 与站点基本主机名匹配,则会打开一个面板。在面板创建的回调中,它向后台页面发送一条消息,要求它从同一站点上的调试端点下载 JSON 有效负载,然后将其发送到 devtools 扩展程序,然后显示它。
问题:
1)后台页面获取请求,下载URL。但是下载没有使用与用户相同的会话,因此下载请求失败。
2)从devtools窗口,我得到了被检查窗口的tabId。我将此 tabId 发送到后台页面,以便它可以从 url 中解析一些内容。但是, chrome.tabs.get(tabId) 不会返回选项卡。
总结一下,我需要
1)获取后台页面以在与正在调试的用户选项卡相同的会话中下载数据。2)我需要让后台页面能够访问用户的标签。