我也回顾了这个问题/答案: 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与内容脚本进行通信吗?
答案 0 :(得分:0)
根据Xan评论,devtools扩展和内容脚本之间的通信应该通过使用后台脚本来完成。这个过程基本上是:
(devtools脚本) - 创建连接(并通过打开的连接端口发送或侦听消息)
(后台脚本) - 侦听要创建的连接,接收端口并使用它来侦听或广播消息
如果你想保持一个长期连接,这很有用,所以基本上你需要为一个进程传递一些消息来回传递。如果您希望不时传递简单消息,但不需要来回传递多条消息,那么您可以实现更简单的通信:
(devtools脚本) - 使用chrome.runtime.sendMessage
(后台脚本) - 使用chrome.runtime.onMessage.addListener()