chrome.tabs.sendMessage:“端口错误:无法建立连接。 “仅在缓存页面上不存在接收端”

时间:2013-04-29 03:44:38

标签: google-chrome-extension

我已经阅读了所有相关的错误,我认为这种情况有点不同。我正在尝试从后台上下文向内容脚本发送消息。 E.g。

chrome.tabs.query({
    currentWindow: true,
    active: true
}, function(tabs){
    chrome.tabs.sendMessage(tabs[0].id, {
        name: name,
        args: args
    }, function(response){
        if (!response) return callback('You tried to message a tab that does not exist');
    });
});

如果在安装扩展程序之前加载了打开的选项卡,则会抛出Port error。要重新创建:

  1. 打开新标签页并加载网页
  2. 导航至“扩展程序”标签并重新加载本地解压缩的扩展程序
  3. 导航回Web选项卡并通过浏览器操作调用扩展程序 - 除非手动重新加载网页,否则它将抛出Port error
  4. 有解决方法吗?

1 个答案:

答案 0 :(得分:2)

而不是发送消息,programatically insert a content script并使用回调的结果:

chrome.tabs.query({
    currentWindow: true,
    active: true
}, function(tabs) {
    chrome.tabs.executeScript(tabs[0].id, {
        code: 'location.href',
        runAt: 'document_start',
        allFrames: false        // Run at the top-level frame only to get
                                // just one result
    }, function(results) {
        var result = results[0];
        console.log(result); // Example
    });
});

您也可以使用file: 'code.js'代替code: '...'来运行文件,而不是在字符串中指定代码。