google-chrome-extension - 通过 Chrome 扩展程序的页面操作弹出窗口与事件选项卡上的内容脚本进行通信

标签 google-chrome-extension popup

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

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

  • 扩展 list (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});
    }
    

现在,在页面操作的弹出窗口中,我想显示匹配的页面标题。不是最后加载的页面的标题(如使用 this answer 完成的),而是事件选项卡的标题。

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

我想我可能可以使用 chrome.tabs.executeScript 进行通信,但这感觉很脏。

不过,我相信,这是一件基本的事情,应该非常简单,但我只是错过了一些东西。请有人帮助我,最好是提供示例代码?

更新:我发现 Mappy example extension它使用 chrome.tabs.onUpdated 来跟踪事件选项卡。不幸的是,这需要 tabs 权限。就我个人而言,我希望尽可能使用最少的权限。

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

最佳答案

我认为您需要在弹出窗口中添加 onClick 事件监听器:

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

查看文档 here .

事件监听器的回调将为您提供 tabId,这肯定是事件选项卡。

关于google-chrome-extension - 通过 Chrome 扩展程序的页面操作弹出窗口与事件选项卡上的内容脚本进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14529822/

相关文章:

带图标的 Android 弹出菜单(类似于 Google Map 应用程序版本 6)

WPF:如何在弹出窗口中自动调整 Web 浏览器的大小?

javascript - 故意使 Chrome 扩展的 Chrome 标签崩溃

r - 如何在 R Shiny 中添加消息框?

javascript - 将 getElementById 切换为 ClassName 以创建弹出窗口不起作用

google-chrome-extension - 用户脚本与 Chrome 扩展

ios - Xcode - 如何制作弹出菜单

javascript - 监听元素的创建并在它出现在 Chrome 扩展程序的页面上时触发事件

javascript - 将 iFrame 中的 JS 文件注入(inject) Google Chrome 扩展中的内容脚本

jquery - 如何在 Chrome 扩展中使用 jquery.com 的 CDN 中的 jQuery