是否有可能从inspectedWindow.eval中向dev-tools面板发送消息?

Is it possible to message the dev-tools panel from within inspectedWindow.eval?

本文关键字:消息 dev-tools 有可能 inspectedWindow eval 中向 是否      更新时间:2023-09-26

我一直在阅读chrome扩展消息传递文档,但我似乎无法从检查窗口内建立通信。

例如

chrome.devtools.inspectedWindow.eval('function() {  
      .
      . 
      .
     /* send message to dev-tools panel */ 
    chrome.runtime.sendMessage({foo:"foo"});<-- Uncaught Error: Invalid arguments to connect. Why is the extensionId required within chrome.devtools.inspectedWindow.eval? This made me step back and ask the question.
}')

我已经尝试利用背景和内容脚本来监听这些消息,但似乎没有什么触发。我的实际实现是监听WebSocket通信,为了简洁起见,我把它省略了。我能够听取每个请求/响应,但是我似乎无法在inspectedWindow.eval内建立通信。最后,我的目标是简单地与我的开发工具面板通信,以便我可以更新UI。

我从一个面临类似问题的人那里找到了一个有趣的repo。然而,他们似乎没有找到一个有效的解决办法。会不会是设计不允许这种类型的消息传递?

https://github.com/thomasboyt/injectedWindow.eval-communication-sadness

您说过您考虑过使用内容脚本。

在这种情况下,您可以引发一个自定义DOM事件,并且内容脚本将能够处理它。

// Content script
window.addEventListener("RebroadcastExtensionMessage", function(evt) {
  chrome.runtime.sendMessage(evt.detail);
}, false);
// Eval'd code
var message = {/* whatever */};
var event = new CustomEvent("RebroadcastExtensionMessage", {detail: message});
window.dispatchEvent(event);

当然,缺点是页面可以监听这些事件,如果它愿意的话,也可以欺骗它们。如果这是一个严重的问题,您可以在事件名称和来自开发工具的消息中包含随机数。但话又说回来,一个真正的恶意页面可以覆盖CustomEvent ..在某种程度上,这不是一个可解决的问题,因为您的inspectedWindow.eval()与页面完全共享上下文(和API访问)。