【问题标题】:Calling Content Script function on chrome.browserAction.onClicked在 chrome.browserAction.onClicked 上调用内容脚本函数
【发布时间】:2014-09-10 03:21:21
【问题描述】:

我的问题很简单,我只想找出最简单的方法。

我的 chrome 扩展的当前迭代通过一个按钮将一个 DIV 注入到网页中,当按下该按钮时,它将执行一个功能。

我想在不注入 DIV 的情况下执行此操作,方法是在工具栏中按下浏览器按钮时在我的一个内容脚本中执行一个函数。最简单的方法是什么?我相信我必须使用后台页面,而我在文档中看到的唯一内容就是在两端注册一些监听事件。如果这是唯一/最简单的方法,我该怎么做?

【问题讨论】:

    标签: javascript jquery google-chrome google-chrome-extension


    【解决方案1】:

    是的,从浏览器或页面操作按钮联系内容脚本是使用在后台脚本和内容脚本之间来回发送的消息完成的

    第一步:告诉后台脚本在browserAction/pageAction按钮点击上做什么

    chrome.browserAction.onClicked.addListener(function(tab) {
       ...
    });
    

    第 2 步:在 browserAction.onClicked 事件侦听器中,您可以向内容脚本发送消息(实际上是任何代码侦听!):

    chrome.tabs.sendMessage(tab.id, {<YOURMESSAGEPAYLOAD>});
    

    第 3 步:在内容脚本中,为传入消息添加侦听器

    chrome.runtime.onMessage.addListener(function(request, sender, callback) {
       // request contains the YOURMESSAGEPAYLOAD sent above as a Javascript object literal
    });
    

    您也可以反过来,通过在内容脚本中使用以下内容,将消息从内容脚本发送到后台脚本

    chrome.runtime.sendMessage({<YOURMESSAGEPAYLOAD>});
    

    然后在后台脚本中使用onMessage 监听器,方法与上述相同。

    【讨论】:

    • 文档没有说,但我假设onClickedtab 参数是活动选项卡。这会让你得到tab.id,而不需要query
    • 确实...我相应地更改了示例
    • 我知道这有点晚了,感谢一百万的回答,但它是 addListener 而不是 addEventListener。
    • 大家好,这也可以用其他方式完成吗?就像从内容脚本中一样,我想在我的浏览器操作页面 JS 中调用一个方法
    • 感谢@devnull69,您几乎向我建议了一个解决方案。我正在尝试将 chrome 扩展程序转换为 safari 扩展程序。 XCode 为我提供了现成的工具,但需要一些桥接知识。再次感谢。希望您的解决方案在这里有所帮助 => stackoverflow.com/questions/49103924/…
    【解决方案2】:

    devnull69 是正确的,你需要使用消息传递。还可以考虑查看chromeps。这是我为 chrome 扩展编写的一个小型 pubsub 库。在编写消息传递代码时消除了很多开销。

    【讨论】:

      猜你喜欢
      • 2013-01-20
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      相关资源
      最近更新 更多