将消息从 Chrome 扩展程序传递到网页
Pass a message from Chrome Extension to Webpage
我需要在Chrome扩展程序中传递一条消息(引发事件),并让网页上的JavaScript做出反应。
在扩展content_script.js
,应该有一个类似
raiseXYZevent(data);
网页上的 JavaScript http://example.com/mypage.html
应该执行一个处理程序
function processXYZevent(data) { ... }
问题是扩展中的内容脚本不能直接与网页上的JavaScript交互(它只能修改DOM)。有没有办法从扩展中进行 DOM 更改,以某种方式从网页中检测它们并调用processXYZevent
?
由于内容脚本和网页共享相同的 DOM,因此您可以使用window.postMessage()
在它们之间发送消息。Chrome API 文档通过示例对此进行了详细说明:
将消息从页面发布到扩展程序
在内容脚本中,等待接收消息:
var port = chrome.runtime.connect();
window.addEventListener("message", (event) => {
// We only accept messages from ourselves
if (event.source !== window) {
return;
}
if (event.data.type && (event.data.type === "FROM_PAGE")) {
console.log("Content script received: " + event.data.text);
}
}, false);
在页面内部(这也包括您通过chrome.scripting.executeScript()
或类似方式注入页面的代码),单击按钮时发送消息:
button.addEventListener("click", () => {
window.postMessage({
type : "FROM_PAGE",
text : "Hello from the webpage!"
}, "*");
}, false);
将消息从扩展发布到页面
上面的文档提到:
通过类似的手段,反之亦然。
为此,只需交换上述示例中的内容脚本代码和页面代码即可。
从内容脚本注入以下内容:
$('html').append(`
<script>
window.addEventListener("message", function(event) {
// We only accept messages from ourselves
if (event.source != window)
return;
if (event.data.type && (event.data.type == "FROM_CONTENT")) {
console.log("Page script received: " + event.data.text)
console.log(event.data.text) // "Something message here"
}
}, false)
<'/script>`)
在内容脚本中,您可以执行以下操作:
window.postMessage({ type: "FROM_CONTENT", text: "Something message here"}, "*")
相关文章:
- 链接两个网页或网络应用程序的最佳方式
- 从Spring应用程序运行PhantomJS以获取网页缩略图
- 网络驱动程序中使用的向下滚动功能从网页的哪个部分进行搜索
- 从网页打开 Mac OS 应用程序
- 跟踪网页上更改的程序
- 树莓派应用程序信息网页
- 使用Java脚本跟踪网页中是否有Ajax请求,或者通过Selenium Web驱动程序拦截XMLHttpRequest
- 当我们打开ADF应用程序的同一网页的不同版本时,如何让浏览器请求java脚本
- 从网页打开android应用程序
- 简单的dart网页应用程序在IE上添加按钮的速度非常慢
- 单页网页应用程序所需的设计建议
- 更新网页上Web服务器程序的实时输出
- 从网页打开应用程序
- 自定义右键单击UI上下文菜单(复制、粘贴、剪切)用于整个应用程序(所有网页)跨所有浏览器而非单个网页
- 如何在twitter引导程序2.3.2中设置网页的最小宽度
- 了解网页和桌面应用程序是否在同一台计算机上启动
- 如何从AdobeAIR应用程序内的网页调用AS3代码
- 如何在Java应用程序中阻止XSS攻击并防止用户在网页上执行JavaScript
- 如何使用 Chrome 扩展程序向网页注入按钮
- 在Chrome扩展程序中从网页按钮单击调用JavaScript方法