我不知道如何在内容脚本和页面操作弹出窗口之间传递数据。
我从以下简单的框架开始,它显示了标题中有减号的任何页面的页面操作:
扩展清单 (
manifest.json
):{ … "permissions": ["http://example.org/*"], "background": {"scripts": ["background.js"]}, "page_action": {"default_popup": "popup.html", …}, "content_scripts": { "matches": ["http://example.org/*"], "js": ["content.js"] } }
后台脚本(
background.js
):chrome.extension.onRequest.addListener(function (msg, sender, respond) { if (msg && msg.what === "match") { console.log("Match:", msg.title); chrome.pageAction.show(sender.tab.id); } }
内容脚本 (
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
用来交流,但这只是感觉很脏。
不过,我相信,这是一件应该非常简单的基本事情,我只是错过了一些东西。有人可以帮助我,最好是示例代码吗?
更新:我找到了Mappy 示例扩展,它用于chrome.tabs.onUpdated
跟踪活动选项卡。不幸的是,这需要tabs
许可。就个人而言,我想尽可能使用最少的权限。
那么,不幸的是权限系统设计不好,我别无选择,只能这样做,还是有任何解决方法?chrome.pageAction.onClicked
如果事件处理程序(提供Tab
我需要的对象)允许我显示一个弹出窗口,我会很高兴......