无法使用Chrome扩展程序中的postMessage从父窗口将数据发送到iframe

塔沙尔·舒克拉(Tushar Shukla)

我正在开发一个Google Chrome浏览器扩展程序,该程序可以在网页上插入脚本,从网页中收集一些数据,调用iframe并将该数据发送到iframe。由于此过程需要跨域,因此实现该功能我唯一想到的就是postMessage,但是我无法在iframe中接收此数据。
(顺便说一句,还有其他方法可以实现相同的功能吗?)

下面是当用户单击扩展名时我在网页上插入的脚本。

jQuery('body').append('<div style="height: 100% !important; width: 100% !important; position: fixed !important; margin: 0% auto !important; background: rgba(17, 17, 17, 0.9) !important; left: 0 !important; right: 0 !important; z-index: 99999999 !important; top: 0% !important;" id="image-grabber-container"><iframe id="vwframe" src="https://example.com/abcd.php"  frameborder="0" style="display: block !important; position: fixed !important; height: 100% !important; width: 100% !important; top: 0px !important; left: 0px !important; bottom: 0px !important; right: 0px !important; margin: 0px !important; clip: auto !important; z-index: 7147483657 !important;"></iframe></div>');

setTimeout(function(){
    var dTitle = document.title;
    var receiver = document.getElementById('vwframe').contentWindow;
    receiver.postMessage(dTitle, '*');
},1000);


我在setTimeout这里使用过的只是为了确保在发布消息时iframe可用/已加载。

现在,我在iframe中调用一个脚本来接收消息:

window.onload = function() {
        function receiveMessage1(e) {
            console.log('mSG');
            if (e.origin !== currentUrl)
                return;

            parentTitle = e.data;
            console.log(parentTitle);
        }
        if (window.addEventListener){
            console.log('if');
          window.addEventListener("message", receiveMessage1, false);
          console.log('if end');
        } else {
            console.log('else');
          attachEvent("onmessage", receiveMessage1);
          console.log('else end');
        }
}


我在控制台中没有看到任何错误,但是receiveMessage1功能无法正常工作。这可能是什么原因?

PS我能够将消息从iframe发送到父级,反之亦然。

立方的

尝试不使用setTimeout和window.onload,而是这样:

<script>

    function receiveMessage1(e) {
        console.log('mSG');
        if (e.origin !== currentUrl)
            return;

        parentTitle = e.data;
        console.log(parentTitle);
    }
    if (window.addEventListener){
        console.log('if');
      window.addEventListener("message", receiveMessage1, false);
      console.log('if end');
    } else {
        console.log('else');
      attachEvent("onmessage", receiveMessage1);
      console.log('else end');
    }
</script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Chrome扩展程序:将数据发送到使用chrome.windows.create创建的窗口

Chrome扩展程序将消息从iFrame发送到事件页面,然后再发送到内容脚本

将消息从弹出窗口发送到内容脚本-Chrome扩展程序

将授权令牌从父窗口发送到 iframe 源,以便 iframe 源可以进行调用

Chome扩展:将chrome.storage数据从后台脚本发送到弹出窗口/内容脚本

Chrome扩展程序:无法获取背景以将sendMessage发送到内容脚本

Chrome扩展程序如何将数据从内容脚本发送到popup.html

如何解决将数据从网页发送到Chrome扩展程序的问题?

将数据从页面发送到 chrome 扩展

如何将 JavaScript 发送到 Chrome 扩展程序中的特定选项卡?

无法使用ajax将数据发送到php文件

如何在Chrome扩展程序中使用AJAX将GET请求发送到“我的XAMPP服务器”

无法将数据发送到 recyclerview

使用JSON将Android App中的数据发送到PHP无法正常工作

chrome扩展程序将选定的文本发送到其他网站

Chrome扩展程序:消息传递(将DOM发送到popup.js)返回“空”

Chrome扩展程序:如何将退格键事件发送到文本字段?

Chrome扩展程序,这是将消息从注入的脚本发送到后台的最佳方法

Chrome扩展程序:将AJAX表单发送到Rails应用

使用EventBus将数据发送到活动中的片段

创建chrome扩展名以将数据发送到localhost服务器

如何将数据窗口表单应用程序发送到网站

在Chrome扩展程序中,更改发送到某些域的Ajax请求的引荐来源网址?

如何使用XML-RPC从将数据发送到某个域的程序中逆向工程数据?

Chrome扩展程序:单击按钮后如何将html表单数据发送到php页面,该页面重定向到该php页面

如何在不使用角度5的* ngFor的情况下将数据从父组件发送到子组件

将数据发送到Flutter中的父窗口小部件

将数据发送到Laravel中其他视图扩展的视图

如何将消息从用 Node.js 编写的本机应用程序发送到 Chrome 扩展程序?