我试图用oAuth的URL打开一个新窗口,但是我无法添加任何事件侦听器。
const wind = window.open(msg.data.url);
console.log(wind);
wind.onload = function () {
wind.onpopstate = function (e) {
console.log('pop', e);
};
};
它什么都不做。但是事实证明window.open()
给了我一个不完整的窗口对象。这就是我所拥有的。如何为此添加事件监听器?
答案 0 :(得分:1)
根据MDN web docs关于window.open()
函数的信息:
返回的Window引用可用于访问属性和 只要符合Same-origin的新窗口的方法 政策安全要求。
这意味着,如果您在此网页上的终端上调用window.open("/questions")
,则会得到一个完整的窗口对象,但是如果您调用window.open("https://google.com")
,则它将仅返回一个简化的对象,您将无法在该对象上进行操作添加事件侦听器。这是为了防止cross-origin攻击。但是,如果新窗口正在侦听该类型的事件,则可以通过Window.postMessage()
将数据传输到新窗口对象。有关更多信息,请参见here。