Uncaught SyntaxError:无法在'Window'上执行'postMessage':调用'postMessage'时无效的目标原点'my_page'

noo*_*php 17 javascript jquery postmessage cross-browser

我有以下脚本

父页面(pair_pixel_filter.php):

 window.addEventListener("message", function(e) {
            $('#log').append("Received message: " + (e.data));
        }, false);
 $('.photo-upload-btn').click(function(event) {
            event.preventDefault();
            window.open($(this).attr("href"), "popupWindow", "width=600,height=600,scrollbars=yes");
        });
Run Code Online (Sandbox Code Playgroud)

儿童页面

$.ajax({
            type: 'post',
            url: url,
            data: {
                base64data: dataURL
            },
            success: function(data) {
                window.opener.postMessage(data, "pair_pixel_filter.php");
                window.close(); }
        });
Run Code Online (Sandbox Code Playgroud)

基本上打开Popup然后在弹出窗口上做一些ajax并将结果返回给父级.但是从Child我得到了这个错误.

未捕获的SyntaxError:无法在'Window'上执行'postMessage':调用'postMessage'时无效的目标原点'pair_pixel_filter.php'

Roc*_*mat 22

第二个参数postMessage是"目标原点".这是页面所在的,而不是(php)文件的名称.

它需要是这样的:

window.opener.postMessage(data, "http://example.com");
Run Code Online (Sandbox Code Playgroud)

请参阅:https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage

  • @noobie-php 实际上,javascript 将忽略域之后的任何内容,因此如果主机是 localhost,即使路径不同,目标窗口也会接受它。因此,传递“http://localhost/abc/mypage.php”作为源将与传递“http://localhost”或“http://localhost/literally/anything/xyz.php”具有相同的效果。 (3认同)