Google chrome extension 通过Chrome扩展与活动选项卡上的内容脚本通信';s页面操作弹出窗口

Google chrome extension 通过Chrome扩展与活动选项卡上的内容脚本通信';s页面操作弹出窗口,google-chrome-extension,popup,Google Chrome Extension,Popup,我不知道如何在内容脚本和页面操作弹出窗口之间传递数据 我从以下简单的框架开始,它显示了任何标题中带有负号破折号的页面的页面操作: 扩展清单(manifest.json): 后台脚本(Background.js): 内容脚本(Content.js),检查文档标题: var title = document.title; if (title.indexOf("-") >= 0) { chrome.extension.sendRequest({"what": "match", "tit

我不知道如何在内容脚本和页面操作弹出窗口之间传递数据

我从以下简单的框架开始,它显示了任何标题中带有负号破折号的页面的页面操作:

  • 扩展清单(
    manifest.json
    ):

  • 后台脚本(
    Background.js
    ):

  • 内容脚本(
    Content.js
    ),检查文档标题:

    var title = document.title;
    if (title.indexOf("-") >= 0) {
      chrome.extension.sendRequest({"what": "match", "title": title});
    }
    
现在,在页面操作的弹出窗口中,我想显示匹配页面的标题。不是最后加载的页面的标题(如使用),而是活动选项卡的标题

我的第一个想法是向内容脚本发送查询,但根据文档
chrome.extension.sendMessage
将向所有侦听器(即所有选项卡上的所有内容脚本)发送查询,而没有任何明确的定义,我将接收回谁的响应。另外,我不能使用
chrome.tabs.sendMessage
,因为它需要
tabId
。尝试使用
chrome.tabs.getCurrent
查找当前选项卡将返回
null
,因为查询来自非选项卡上下文(从弹出窗口)

我想我可能可以使用
chrome.tabs.executeScript
来交流,但这感觉很脏

不过,我相信,这是一个基本的事情,应该是非常简单的做,我只是错过了一些东西。有人能帮我一个示例代码吗


更新:我找到了,它使用
chrome.tabs.onUpdated
跟踪活动选项卡。不幸的是,这需要
选项卡
权限。就我个人而言,我希望使用尽可能少的特权


那么,不幸的是,这只是糟糕的权限系统设计,我别无选择,只能这样做,还是有任何解决办法?如果
chrome.pageAction.onClick
事件处理程序(提供我需要的
选项卡
对象)允许我显示一个弹出窗口…

我想您需要在弹出窗口中添加
onClick
事件侦听器:

chrome.pageAction.onClicked.addListener(function(tabs.Tab tab) {...});
见文件


事件侦听器的回调将为您提供tabId,它肯定是活动选项卡。

您的代码中存在多个问题

  • chrome.extension.sendRequest中的chrome.extension.sendRequest({“what”:“match”,“title”:title})已弃用
  • chrome.pageAction.onClicked当您的清单中有
    “页面操作”:{“默认弹出”:“popup.html”,…},
    时,将不会触发
  • chrome.extension.sendMessage将发送到所有侦听器(即所有选项卡上的所有我的内容脚本),
    是无效的假设,它将发送到扩展页面

我试过多次阅读你的问题,但不明白你想要实现什么,你能解释一下吗?

你试过从popup.html调用content.js脚本吗?@im\u benton,我怀疑这是可能的。内容脚本在另一个上下文中运行,与弹出窗口不同。据我所知,他们除了
chrome.extension
消息总线之外,什么都不共享。无论如何,出于好奇,我尝试在
content.js
中声明一个函数,然后从
popup.js
(一个从
popup.html
引用的脚本)调用它,但显然失败了。“不幸的是,这需要
tabs
权限。就我个人而言,我希望使用尽可能少的权限。”这正是
activeTab
权限的作用:这个onclick监听器如何帮助操作,他有
page\u操作:{“default\u popup”:“popup.html?”
在他的清单中。我想要的是:1.内容脚本对文档执行检查,如果匹配为正,将显示一个页面操作图标。在我的示例中,它正在检查文档标题中的“-”状态。2.用户可以打开多个选项卡并按任意顺序切换。3.当用户单击页面操作图标时,将打开一个弹出窗口,其中包含当前选项卡中文档的一些信息(即,页面操作所属的选项卡),如内容脚本所述。我询问了文档标题,但理想的示例是显示页面第一个
@drdaeman的文本。如果您只需要页面标题,不需要内容脚本,tabs api可以为您提供此信息,请检查,这都可以通过
消息传递
内容脚本实现
背景页
,现在你在哪里?我一直在尝试将一条消息从弹出页传递到活动选项卡中运行的内容脚本。@drdaeman:你能发布消息传递的代码吗,我将尝试识别问题。
var title = document.title;
if (title.indexOf("-") >= 0) {
  chrome.extension.sendRequest({"what": "match", "title": title});
}
chrome.pageAction.onClicked.addListener(function(tabs.Tab tab) {...});