内容脚本和DevTools页面的chrome.runtime.connect无法连接

时间:2014-09-23 15:31:14

标签: google-chrome google-chrome-extension google-chrome-devtools

我也回顾了这个问题/答案: Communicating between Chrome DevTools and content script in extension

看起来他们正在做的事情与我试图做的有些不同,所以我不知道它适用多少。也许我绝对需要一个background.js文件?

我也回顾了这个问题: extension using background, content and devtools together

这里看起来他们没有使用这里记录的长期连接(这是我需要的): https://developer.chrome.com/extensions/messaging#connect

无论如何,此处的前一个问题是我的问题:

我已经在几个小时的时间内尝试了几种方式,所以我很确信我只是错过了一些方法来完成这项工作。

我的问题的症结在于:

chrome.runtime.onConnect.addListener(function(){...})

这里的听众永远不会开火。

这是我的设置:

我的扩展程序使用内容脚本和DevTools页面。从两个位置,内容脚本和DevTools页面,我尝试通过chrome.runtime启用消息传递。我的样板初始化如下所示,用于启动连接:

console.log('initializing connection');
var port = chrome.runtime.connect({name: 'My Extension'});
console.log('port', port.name);

这等待onConnect:

chrome.runtime.onConnect.addListener(function(port){
    console.log('got connection!!!!!!');
});

永远不会调用我的onConnect处理程序。我尝试将连接代码(chrome.runtime.connect({...}))放在内容脚本和DevTools页面JS中,同时将处理程序初始化放在相反的位置无济于事。

换句话说,如果我将连接代码放在内容脚本中,我会将处理程序初始化放入DevTools页面JS中。如果我将连接代码放入DevTools页面JS,我将处理程序初始化放入内容脚本。

在这两种情况下,我都没有收到运行时错误,但是,我也从未看到console.log('got connection!!!!!!');被调用。是的,当我在DevTools页面JS中进行处理程序初始化时,我正在查看DevTools页面控制台。

我只是在文档中误解某些内容或遗漏某些内容。任何人都可以指出我正确的方向:让DevTools页面JS与内容脚本进行通信吗?

1 个答案:

答案 0 :(得分:0)

根据Xan评论,devtools扩展和内容脚本之间的通信应该通过使用后台脚本来完成。这个过程基本上是:

  1. (devtools脚本) - 创建连接(并通过打开的连接端口发送或侦听消息)

  2. (后台脚本) - 侦听要创建的连接,接收端口并使用它来侦听或广播消息

  3. 如果你想保持一个长期连接,这很有用,所以基本上你需要为一个进程传递一些消息来回传递。如果您希望不时传递简单消息,但不需要来回传递多条消息,那么您可以实现更简单的通信:

    1. (devtools脚本) - 使用chrome.runtime.sendMessage

    2. 发送消息
    3. (后台脚本) - 使用chrome.runtime.onMessage.addListener()

    4. 侦听与其关联的任何扩展程序发送的邮件