Javascript 请解释与Google Chrome Extensions的后台通信

Javascript 请解释与Google Chrome Extensions的后台通信,javascript,ipc,google-chrome-extension,Javascript,Ipc,Google Chrome Extension,我已经阅读并重新阅读了本页,还运行了以下示例: 但是我似乎不知道如何在background.html、popup.html和content.js之间进行后台通信。我想向触发器函数发送消息,获取响应,并处理这些响应。地图样本几乎可以帮助我,但我只需要一些超级简单的东西,而不需要所有的地图资料。(注意,我知道jQuery和Javascript,所以如果你愿意,可以随意加入一些jQuery。)所有扩展页面(背景页面、弹出窗口、信息栏、页面操作都在同一个扩展中运行。将其视为一个包含一个域的网页。该域是

我已经阅读并重新阅读了本页,还运行了以下示例:

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

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

所有扩展页面(如上所述)都可以轻松地相互通信,您可以通过多种方式进行通信:

  • 你直接做!我会尽可能地使用这种方法。我认为它更干净

    var bkg = chrome.extension.getBackgroundPage();`  
    bkg.ping();`
    
  • 如下所示,您也可以使用来传递信息。当我希望它是面向事件的时,我使用这种方法。我很少在扩展页面中使用这种方法

    popup.html

    chrome.extension.sendRequest({method: 'ping'}, function(response) {
       // response.result
    });
    
    chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
        if (request.method == 'ping') {
            sendResponse({result: 'pong'});
        }
    });
    
    background\u page.html

    chrome.extension.sendRequest({method: 'ping'}, function(response) {
       // response.result
    });
    
    chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
        if (request.method == 'ping') {
            sendResponse({result: 'pong'});
        }
    });
    
  • 现在,“扩展页”和“”之间存在差异。请仔细阅读该文档以理解它。内容脚本不是扩展页,您不能做扩展页所做的事情。您不能直接与上面提到的任何页面通信。内容脚本是在网页上下文中运行的JavaScript文件,而不是扩展页。这是一个需要识别的重要区别

    因此,为了在扩展页面和内容脚本之间进行通信,您需要使用。该页面包含大量信息,我强烈建议您阅读。它与我们使用消息传递的方式非常相似(上面的步骤2),但唯一不同的是发送请求的方式。您需要使用,因为您需要从扩展页(背景、弹出窗口、页面等)向内容脚本发送单个请求。您需要知道选项卡的ID才能执行此操作。有关详细信息,请参阅

    如果您的扩展经常与内容脚本通信,那么您可以使用长寿命连接,这在我喜欢的上面的消息传递部分中有很好的解释


    关于类似的问题,我已经回答了很多问题,其他人也回答了很多问题。由于您在JavaScript方面的经验,我强烈建议您阅读文档,它包含了您所需要的一切。阅读API,我希望您现在了解内容脚本和扩展页面之间的区别,并且通过h Extension Messaging.

    如果您在这方面也使用了jQuery,那么还需要注意一点。您需要在background.html中加载jQuery,否则您将一事无成。此外,我发现我不必从background.html的内容脚本请求中执行chrome.tabs.sendRequest——我只使用了上面的#2,它就起作用了。还有一些可怕的东西没有tice,可能是我的Chrome在后台更新了,或者是有了新版本。昨天,我通过content.js对本地主机进行了AJAX调用,但没有收到任何错误。今天,它出现了一个跨域错误,迫使我使用background方法。这里有一段非常有用的代码:你不能使用chrome、 tabs.sendRequest或getBackgroundPage从内容脚本中,您必须使用#2(消息)在后台页面中设置侦听器,并通过chrome.extension.sendRequest传入消息。如果需要更多帮助,请告诉我:)@MohamedMansour如何从Google chrome扩展的信息栏调用背景页函数、内容脚本函数、popup.html函数。相关: