端口错误:无法建立连接。 “undefined”的事件处理程序出错。 (镀铬扩展)

时间:2013-03-20 07:27:38

标签: google-chrome google-chrome-extension

我基本上是在尝试执行Chrome扩展程序文档中的代码。那就是我被困住的地方。

我正在尝试从内容脚本>>传递值背景页面(XHR)。

我在控制台中的错误是:

  

端口错误:无法建立连接。接收端不存在。 miscellaneous_bindings:236   

'undefined'的事件处理程序出错:无法读取未定义的属性'告别'TypeError:无法读取未定义属性'告别'       
在chrome-extension://bccajmddlghglocgmkpkpbiankmhlfkc/js/content_script.js:23:23       
在miscellaneous_bindings:281:11       
在chrome.Event.dispatchToListener(event_bindings:387:21)       
在chrome.Event.dispatch_(event_bindings:373:27)       
在chrome.Event.dispatch(event_bindings:393:17)       
在Object.chromeHidden.Port.dispatchOnDisconnect(miscellaneous_bindings:239:27)

content_script.js 如下所示:

function func1(){

$(function() {

    $('.genericStreamStory').each(function(){
       var link = $(this).find('.uiStreamSource a').attr('href');

       $(this).find('.uiStreamFooter').find('.a1').remove();
       $(this).find('.uiStreamFooter').append("<span class='a1' style='color:red !important;'> · Sample</span>");


       $(this).find('.a1').click(function(){
           alert('hi');
            chrome.extension.sendMessage({greeting: "hello"}, function(response) {
              console.log(response.farewell);
        });

        console.log('testing');

       }); //end of click handler
    });     //end of 'each' function
});

}
func1();
window.setInterval("func1()", 1000);

发送消息声明chrome.extension.sendMessage({greeting: "hello"}, function(response) { console.log(response.farewell); });

取自Chrome Extension Documentation

background.js

$(function() {

    chrome.extension.onMessage.addListener(
        function(request, sender, sendResponse) {
          console.log("background");
          console.log(sender.tab ? "from a content script:" + sender.tab.url : "from the extension");
          if (request.greeting == "hello")
          sendResponse({farewell: "goodbye"});
 });// end of onMessage listener

});

onMessage Listener的代码取自Chrome文档。

最后, manifest.json

{
"name": "Facebook123",
"version": "0.1", 
"description": "Sample",

"content_scripts": [
    {
        "matches": ["https://*.facebook.com/*"],
        "js": [
                "/js/external/jquery.js", 
                "/js/content_script.js"
            ]
    }
],

"background": {
    "scripts": ["/js/background.js"]
},

"manifest_version": 2
}

看起来监听器似乎没有“可用”来处理conrent_script.js发送的消息。

content_script.js中的Click Handler正在运行。当我点击跨度'a1'时,弹出'hi'警告框并在控制台中打印消息'testing'。

可能是什么错误?

1 个答案:

答案 0 :(得分:1)

打开背景页面的控制台(Where to read console messages from background.js in a Chrome extension?)。

您会看到类似“ReferenceError:$ is not defined”的错误,因为您在没有加载jQuery的情况下使用$(function() { });
您不必在后台页面中等待domready事件,因此删除$(function(){});可以解决问题。另一种解决方法是包含jQuery:

"background": {
    "scripts": [
        "/js/external/jquery.js", 
        "/js/background.js"
    ]
},

通常,“端口错误”表示您正在尝试发送消息,而没有人正在侦听消息。在这种情况下,侦听器由于错误而没有绑定,但是通常你会发现序列(事件绑定,事件触发)的时间非常严格,需要修复。