如果我们从页面触发自定义事件,注入页面的内容脚本能否捕获该事件并进行处理?
问问题
1447 次
1 回答
3
是的,内容脚本可以与注入的网页进行通信。因为内容脚本的上下文和注入的网页是相互隔离的,所以它们必须与共享的 DOM 通信。
我认为内容脚本无法捕获由注入页面直接触发的自定义事件。但是您可以在触发特定自定义事件时将消息发布到内容脚本。window.postMessage 可以满足您的需求。
注入页面:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<button id="btn">test</button>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$("#btn").click(function(){
$(document).trigger("MY_EVENT");
});
$(document).on("MY_EVENT",function(){
window.postMessage({ type: "HELLO", text: "Hello from the webpage!" }, "*");
});
</script>
</body>
</html>
内容脚本:
window.addEventListener("message", function(event) {
if (event.source != window)
return;
if (event.data.type && (event.data.type == "HELLO")) {
alert("Content script received: " + event.data.text);
}
}, false);
希望这对你有帮助。
于 2013-08-01T06:36:07.380 回答