繁体   English   中英

谷歌浏览器扩展名-无法将消息从内容脚本传递到同一扩展名中的弹出页面

[英]google chrome extension- unable to pass message from content script to popup page in same extension

我正在使用以下代码从内容脚本发送示例消息:

function sendjsontrue()
{

        var arrCars = new Array("Toyota", "Mercedes", "BMW");           
            jsonStr = JSON.stringify(arrCars);
        chrome.extension.sendRequest({greeting: jsonStr},     function(response){
            console.log(response.farewell);
            });
        console.log("Message with header=greeting has been sent...");
}

我的popup.html中用于处理内容脚本发送的消息的代码如下:

<script>
chrome.extension.onRequest.addListener(
  function(request, sender, sendResponse) {
    console.log(sender.tab ?
            "from a content script:" + sender.tab.url :
            "from the extension");
  if (request.greeting == "hello")
      sendResponse({farewell: "goodbye"});
  else
      sendResponse({notfarewell:"Not goodbye"}); .
  });

</script>

我得到的错误如下:

Port error: Could not establish connection. Receiving end does not exist.
chrome/EventBindings:184Error in event handler for 'undefined': TypeError: Cannot read     property 'farewell' of undefined
at chrome-extension://nkmkgjckmjekpbghhildcfdlnbjeglkd/obtainformdata.js:81:25
at chrome/RendererExtensionBindings:238:13
at [object Object].dispatch (chrome/EventBindings:182:28)
at Object.<anonymous> (chrome/RendererExtensionBindings:134:27)

我在这里做错了什么?

我在听来自option.html的请求时遇到了同样的问题 我发现以下解决方案:

您也可以在弹出页面中编写接收器代码,但限制是只有当popup.html处于活动状态时, chrome.extension.onRequest.addListener()才会侦听您的请求。 因此,如果您想一直收听请求,则必须编写

chrome.extension.onRequest.addListener()

后台页面中,然后将此页面注册到manifest.json

您应该在后台页面而不是在弹出窗口中编写接收器代码。 默认情况下,内容脚本与后台页面通信。

如果您需要不错的文档,请查看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM