是否有可能从inspectedWindow.eval中向dev-tools面板发送消息?
Is it possible to message the dev-tools panel from within inspectedWindow.eval?
我一直在阅读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访问)。
相关文章:
- Ajax聊天消息重复而不仅仅是更新
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 如果localstorage为空,则显示欢迎消息
- 绑定时将Parsley minlength消息作为选项传递时,未对其进行自定义
- 离开页面时弹出消息
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 消息显示之外的淘汰验证
- 选项卡侦听器未被来自后台脚本的消息激活
- jQuery在输入下验证post错误消息
- Scipt未在选定选项卡中执行以发送和接收消息
- 检查xmlhttprequest问题的消息
- AngularJs对ng消息的自定义替换
- ng消息仅在触摸时显示错误,并在错误的初始显示上转换
- firefox插件和dev/panel之间的通信
- Webpack-dev-server 即使在显示捆绑有效消息后也不会捆绑
- 我可以控制台.debug()并在那里制作Chrome Dev-tools断点吗?
- 从chrome dev. tools更新angular .js工厂
- 是否有可能从inspectedWindow.eval中向dev-tools面板发送消息?
- 如何从Dev Tools扩展中提取加载的javascript文件
- (非远程)home Dev Tools ("Inspect element")在Android上等效