如果我们要从页面触发自定义事件,注入页面的内容脚本是否可以捕获该事件和进程?

最佳答案

是的,内容脚本可以与注入的网页进行通信。由于内容脚本和注入的网页的上下文相互隔离,因此它们必须与共享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);


希望这对您有帮助。

关于javascript - Chrome扩展程序内容脚本捕获自定义事件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17986081/

10-11 15:20