Chrome扩展程序端口错误:无法建立连接。接收端不存在

时间:2013-01-19 22:06:22

标签: google-chrome-extension

我已尝试浏览此处发布的类似问题,但似乎都没有效果

的manifest.json

{
    "manifest_version": 2,
    "name" : "A simple Found Text Demo",
    "description" : "Bla",
    "version" : "1.0",
    "background" : {
        "pages" : "background.html"
    },
    "page_action" : {
        "default_icon" : "icon.png"
    },

    "content_scripts" : [{
        "matches" : ["*://*/*"],
        "js" : ["contentscript.js"]
    }]
}

Background.html

<html>
 <script>
    chrome.extension.onMessage.addListener(
            function(request, sender, sendResponse){
            alert(request);

    //chrome.pageAction.show(sender.tab.id);
            sendResponse('Found!');
            }
    )
 </script>
</html>

Contentscript.js

chrome.extension.sendMessage({"name" : "hola"}, function(res){
     console.log(res); })

但是我反复得到同样的错误:

Port error: Could not establish connection. Receiving end does not exist.

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

由于事情已更改为manifest 2,因此您实际上不再允许使用内嵌脚本(例如您在上面的background.html标记中的<script>中所拥有的内容。 here)。我不确定你的用例,但在大多数情况下简单的情况(读:我已经完成的东西:)),你实际上不需要用任何东西填充background.html。相反,您可以直接传入一个background.js文件,该文件将包含您上面的相同脚本。因此,您可以尝试将manifest.json更改为:

{
    "manifest_version": 2,
    "name" : "A simple Found Text Demo",
    "description" : "Bla",
    "version" : "1.0",
    "background" : {
        "scripts" : ["background.js"]
    },
    "page_action" : {
        "default_icon" : "icon.png"
    },

    "content_scripts" : [{
        "matches" : ["*://*/*"],
        "js" : ["contentscript.js"],
        "run_at": "document_end"
    }]
}

请注意,我们在此处做了两件事 - 在pages内将scripts更改为background并将其指向["background.js"],然后将"run_at": "document_end"添加到最后content_scripts部分。如果遗漏,这肯定会导致问题(类似于您现在看到的问题) - 您现在告诉内容脚本在页面加载后运行。如果它立即运行,则存在后台页面未加载的风险,这意味着它尚未准备好接收消息并给出连接错误。以下为background.js,与您之前的<script>代码之间的脚本相同:

chrome.extension.onMessage.addListener(
        function(request, sender, sendResponse){
        alert(request);

//chrome.pageAction.show(sender.tab.id);
        sendResponse('Found!');
        }
)