【问题标题】:Please Explain Background Communication with Google Chrome Extensions请解释与 Google Chrome 扩展的后台通信
【发布时间】:2011-06-12 05:27:42
【问题描述】:

我已阅读并重新阅读此页面,并运行示例:

http://code.google.com/chrome/extensions/background_pages.html

但我似乎没有掌握如何在background.html、popup.html和content.js之间进行后台通信。我想发送消息以触发函数、获取响应并处理这些响应。地图样本有点接近帮助我,但我只需要一些超级简单的东西,而不需要所有地图的东西。 (注意,我知道 jQuery 和 Javascript,所以如果你愿意,可以随意混合一些 jQuery。)

【问题讨论】:

标签: javascript ipc google-chrome-extension


【解决方案1】:

所有扩展程序页面(背景页面、弹出窗口、信息栏、页面操作都在同一个扩展程序中运行。将其视为具有一个域的网页。该域是您的扩展程序 ID。这些扩展程序页面中的每一个都像一个常规页面(开发网站时类似)。

所有扩展页面(上面提到的)都可以很容易地相互通信,你有多种方式这样做:

  1. chrome.extension.getBackgroundPage()

    你直接做!我尽可能使用这种方法。在我看来它更干净。

    var bkg = chrome.extension.getBackgroundPage();`  
    bkg.ping();`
    
  2. chrome.extension.onRequest.addListenerchrome.extension.sendRequest

    如下所示,您也可以使用extension messaging 传递信息。当我希望它面向事件时,我会使用这种方法。我很少在扩展页面中使用它。

    popup.html

    chrome.extension.sendRequest({method: 'ping'}, function(response) {
       // response.result
    });
    

    background_page.html

    chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
        if (request.method == 'ping') {
            sendResponse({result: 'pong'});
        }
    });
    

现在“扩展页面”和“Content Scripts”之间存在差异。请仔细阅读该文档以了解它。内容脚本不是扩展页面,您不能做扩展页面所做的事情。您不能直接与上述任何页面进行交流。内容脚本是在网页上下文中运行的 JavaScript 文件,而不是扩展页面。这是一个重要的区别。

因此,为了在您的扩展页面和内容脚本之间进行通信,您需要使用Messaging。该页面有很多信息,我强烈建议您阅读它。它与我们使用消息传递的方式非常相似(上面的第 2 步),但唯一不同的是您发送请求的方式。您需要使用chrome.tabs.sendRequest,因为您需要从扩展页面(背景、弹出窗口、页面等)向内容脚本发送单个请求。您需要知道标签的 ID 才能执行此操作。请查看Tab API 了解更多信息。

如果您的扩展程序经常与您的内容脚本通信,您可以使用长寿命连接,我喜欢上面的消息部分对此进行了很好的解释。

我已经回答了很多问题,其他人也回答了类似的问题。由于您有 JavaScript 经验,我强烈建议您阅读文档,它包含您需要的一切。阅读 API,我希望您现在了解 Content Script 和 Extension Pages 之间的区别,它们之间的通信是通过 Extension Messaging 进行的。

【讨论】:

  • 还有一点需要注意,如果一个人也在使用 jQuery。您需要在 background.html 中加载 jQuery,否则您将一事无成。另外,我发现我不必从我的 background.html 内容脚本请求中执行 chrome.tabs.sendRequest ——我只是使用了上面的#2,它就可以工作了。
  • 还有一些令人毛骨悚然的东西需要注意,可能是我的 Chrome 在后台更新了或者有新版本。昨天,我能够对我的本地主机进行 AJAX 调用,而不会通过 content.js 收到任何错误。今天——它现在有一个跨域错误,迫使我使用后台方法。一段非常有用的代码在这里:src.chromium.org/viewvc/chrome/trunk/src/chrome/common/…
  • 您不能使用内容脚本中的 chrome.tabs.sendRequest 或 getBackgroundPage,您必须使用 #2(消息传递)在后台页面中设置您的监听器,并通过 chrome.extension 传递消息。发送请求。如果您需要更多帮助,请告诉我:)
  • @MohamedMansour 如何从谷歌浏览器扩展的信息栏调用后台页面函数、内容脚本函数、popup.html函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多