2

我已经阅读了所有相关的错误,我认为这个案例有点不同。我正在尝试将消息从后台上下文发送到内容脚本。例如

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 回答 1

2

无需发送消息,而是以编程方式插入内容脚本并使用回调的结果:

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: '...'

于 2013-04-29T08:24:20.480 回答