【问题标题】:get 'this' tab of content script (not selected, not active tab)?获取内容脚本的“此”选项卡(未选择,非活动选项卡)?
【发布时间】:2018-03-26 16:03:19
【问题描述】:

有一些类似的问题,但它们都归结为 chrome.tabs.getSelectedchrome.tabs.query API,这不适合我的情况。

基本上我需要做的是获取运行脚本的选项卡的id - 所以它不一定是活动或选定的选项卡。

根据the doc

getCurrent chrome.tabs.getCurrent(函数回调)

获取执行此脚本调用的选项卡。或许 如果从非选项卡上下文(例如:背景)调用,则未定义 页面或弹出视图)。

这意味着它应该在内容脚本中工作,但 chrome.tabs 在内容脚本中未定义。为什么会这样?有什么方法可以知道this 选项卡数据(从运行内容脚本的位置而不是从选定或活动选项卡)?

尽管文档说 tabs 权限对于大多数 API 来说不是强制性的,但我还是没有运气地将其添加到清单中:

{
  "manifest_version": 2,
  "name": ...
  "permissions": [
    ...
    "tabs",
    ...
}

非常感谢任何想法

get current/this tab 的用例是,当扩展程序完成其工作时,它需要重新加载作为工作流程的一部分运行它的页面,并且用户可以在不同的选项卡或不同的窗口中。扩展程序的脚本仍然需要获取正确的 tabId 才能继续按预期工作。

【问题讨论】:

  • 您不能在内容脚本中使用chrome.tabs。只允许使用 4 个 chrome API(在docs 中列出)。
  • @wOxxOm 谢谢 - 那么 getCurrent api 的用例是什么?如果从后台运行(这很明显),它会返回未定义的选项卡,但在脚本中它不可用。这个方法对我来说看起来很奇怪

标签: javascript google-chrome-extension


【解决方案1】:

实际上,您只能在来自chrome-extension:// 方案的页面上使用chrome.tabs.getCurrent(作为扩展程序的选项页面或通过chrome.tabs.createchrome.windows.create 打开),或者如果您正在使用chrome_url_overrides。背景、弹出和嵌入选项页面没有当前选项卡,并且 API 不存在于内容脚本中。

【讨论】:

  • 乔希,谢谢,你拯救了我的一天!我试图弄清楚为什么我的 chrome-extension:// 页面使用 chrome.tabs.query 使上下文无效,但使用 chrome.tabs.getCurrent 一切正常
【解决方案2】:

嗯,看来我已经找到了问题的答案。

诀窍是向后台脚本发送消息并从那里提取sender 数据。发件人将包含运行脚本的tab 对象。

我正在使用ports,所以这就是我将在下面的示例中描述的内容:

在内容脚本方面:

    var port = chrome.extension.connect({
        name: "some name"
    });

    port.postMessage({"key":"some json here"})

在背景方面:

chrome.extension.onConnect.addListener(function (port) {
    console.log(port.sender.tab)
})

port.sender 是一个 MessageSender 对象,其中包含 tabId(如果清单中添加了“tabs”权限,则包含 tabUrl)

在我的情况下,我只是将 tabId 从后台发送回内容脚本:

port.postMessage({"tabId":port.sender.tab.id})

更多信息请见messaging doc 和this api doc

【讨论】:

  • 不幸的是,这是最好的方法。虽然我建议发送一次性消息而不是打开端口,因为这不是长期连接。
  • 如果您的问题已经解决,请接受它作为正确答案,以供未来用户使用。
  • @err1100,在我接受之前还有 2 天的差距 - 我不可能早点做到 - 我真的试过了 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
相关资源
最近更新 更多