是否可以从 inspectedWindow.eval 中向开发工具面板发送消息?
Is it possible to message the dev-tools panel from within inspectedWindow.eval?
我一直在阅读 chrome 扩展 message passing documentation,但我似乎无法与被检查的 window 建立通信。
例如,
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 流量,为简洁起见,我将其省略。我能够听到每个 request/response,但我似乎无法在 inspectedWindow.eval 中建立通信。最后,我的目标是简单地与我的开发工具面板进行通信,以便我可以更新 UI.
更新
我从遇到类似问题的人那里找到了一个有趣的回购协议。然而,他们似乎没有找到有效的解决方案。会不会是设计不允许这种消息传递?
https://github.com/thomasboyt/injectedWindow.eval-communication-sadness
您说您考虑过使用内容脚本。
在那种情况下,您可以raise a custom DOM event,内容脚本将能够处理它。
// 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 访问)页面。
我一直在阅读 chrome 扩展 message passing documentation,但我似乎无法与被检查的 window 建立通信。
例如,
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 流量,为简洁起见,我将其省略。我能够听到每个 request/response,但我似乎无法在 inspectedWindow.eval 中建立通信。最后,我的目标是简单地与我的开发工具面板进行通信,以便我可以更新 UI.
更新
我从遇到类似问题的人那里找到了一个有趣的回购协议。然而,他们似乎没有找到有效的解决方案。会不会是设计不允许这种消息传递?
https://github.com/thomasboyt/injectedWindow.eval-communication-sadness
您说您考虑过使用内容脚本。
在那种情况下,您可以raise a custom DOM event,内容脚本将能够处理它。
// 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 访问)页面。