【问题标题】:Communicate directly between custom Chrome devtools panel and Chrome Extension content script在自定义 Chrome 开发工具面板和 Chrome 扩展内容脚本之间直接通信
【发布时间】:2018-02-13 05:51:09
【问题描述】:

我的问题是:有没有办法在我的自定义 Chrome DevTools 面板和我的 Chrome 扩展的内容脚本之间直接通信?现在,我似乎需要使用后台脚本作为内容脚本和开发工具面板之间的中介。

我尝试使用自定义窗口事件:

//在开发工具面板中

let event = new Event('suman-dev-tools', {
  value: 'foo'
} as any);


window.dispatchEvent(event);

//在内容脚本中

window.addEventListener('suman-dev-tools', function(ev){
  console.log('my devtools panel has spoken:', ev);
});

但这似乎不起作用 - 看起来我无法使用窗口事件在两件事之间进行通信。我必须使用后台页面在 devtools 页面和内容脚本之间进行通信吗?

【问题讨论】:

  • 尝试通过 chrome.runtime.connect 为您的内容脚本打开一个端口
  • wOxxOm 如果你不知道这个技巧,@Deliasz 的答案很好

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


【解决方案1】:

正如您所提到的,最佳做法是使用后台脚本作为消息代理。

但还有另一种方法可以直接从开发工具面板运行内容脚本中的代码:devtools.inspectedWindow.evaluseContentScriptContext: true 允许您在内容脚本范围内评估代码。

chrome.devtools.inspectedWindow.eval('<your code>', {
    useContentScriptContext: true
}, function(result) {
    // result of the execution
});

【讨论】:

  • 我可能会使用这个,谢谢....使用后台脚本作为消息代理并不是最简单的事情,尤其是因为我需要将 devtools 窗口与匹配的内容脚本相匹配
  • 这行得通,非常感谢。它也适用于注入脚本(executeScript)。我唯一的抱怨是,inspectedWindow.eval 方法的 TypeScript 类型似乎是错误的。
猜你喜欢
  • 2012-07-29
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
相关资源
最近更新 更多