无法在DOMWindow上执行postMessage:目标来源

时间:2019-08-01 10:23:09

标签: javascript firefox-addon cross-domain

我正在研究firefox插件。我有2个脚本filler.js和aws.js

filler.js

document.getElementById("orderNow").addEventListener("click", function() {

var domain = 'https://www.amazon.com/';
var openWin = window.open(domain);

//message sender
var message = "WS Iron Man";
openWin.postMessage(message,domain); //sending the message

});

aws.js

window.onload = function () {
//alert('page loaded successfully'); //alert function working here
window.addEventListener("message", receiveMessage, false);

function receiveMessage(event) {
    if (event.origin !== "http://localhost/waveapp/includes/pages/order_details.html")
        return;
// alert to check function working or not
var msg = event.data;
    alert(msg);  

}
};

manifest.json

 {

"manifest_version": 2,
"name": "Borderify",
"version": "1.0",

"description": "Copy details to amazon.com.",

"icons": {
"48": "icons/border-48.png"
},

"content_scripts": [
{
  "matches": ["<all_urls>"],
  "js": ["filler.js"]
},
 {
  "matches": ["*://*.amazon.com/*"],
  "js": ["aws.js"]
}
],

"permissions": [
"clipboardRead",
"unlimitedStorage",
"storage"
]

}
在本地主机上运行的

filler.js和在amazon.com上运行的aws.js。这是一个Firefox扩展程序。

我跑步时,在控制台中收到错误消息

无法在'DOMWindow'上执行'postMessage':提供的目标原点('https://www.amazon.com')与收件人窗口的原点('null')

也收到此味精

https://www.amazon.com”上的跟踪器“ http://localhost”自动授予存储访问权限

请帮助我修复它,对不起我的英语不好

1 个答案:

答案 0 :(得分:0)

我建议您阅读Window.postMessage()

它说,我引用:

  

通常,允许不同页面上的脚本相互访问   当且仅当它们源自的页面共享相同的协议时,   端口号和主机(也称为“同源策略”)。   window.postMessage()提供了一种受控机制来安全地   规避此限制(如果使用得当)。

所以这不是CORS错误,因为这些错误在这种情况下不适用。

发生这种情况的原因有多种:

  • 您实际上使用的网址与提供的网址不同
  • 您已经关闭了打开的窗口(关闭后,窗口会将所有内容设置为null)
  • 您正在window.openwindow.postMessage之间进行操作,这可能会更改引用中存储的内容