将邮件从Chrome扩展程序传递到网页

时间:2013-09-26 17:50:15

标签: javascript jquery javascript-events google-chrome-extension

我需要在Chrome扩展程序中传递消息(举起活动),并在网页上对JavaScript做出反应。

在扩展程序的content_script.js中,应该有一个类似

的函数
raiseXYZevent(data);

网页http://foo.com/mypage.html上的JavaScript应该执行处理程序

 function processXYZevent(data) { ... }

问题是扩展中的内容脚本无法直接与网页上的JavaScript交互(它只能修改DOM)。有没有办法从扩展程序中进行DOM更改,以某种方式从网页中检测它们并调用processXYZevent

2 个答案:

答案 0 :(得分:4)

由于内容脚本和网页共享相同的DOM,因此您可以使用postMessage在它们之间发送消息。 Chrome API documentation通过示例详细解释了这一点。

答案 1 :(得分:0)

从内容脚本中注入以下内容:

$('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"}, "*")