子窗口加载事件在Firefox上不起作用



使用window.open('', 'name')打开空白子窗口时,其加载事件在Firefox中不起作用。虽然在铬,它确实工作。

请参阅我的stackblitz演示-在chrome中,您可以看到控制台日志消息,但在Firefox中则看不到。

此外,Firefox中的readyState没有按预期工作,也没有更新。

我错过了什么?如何解决这个问题?

根据MDN文章,window.open返回WindowProxy实例,该实例代理Window对象包含的所有属性,包括onloadaddEventListener。代理的主要目标是限制新创建的window来自父window的未经授权的访问。访问由浏览器控制,仅当这两个选项卡都满足同源策略时,浏览器才允许父window与子实例交互。如果没有这个安全规则,任何人都可以直接从代码中修改或以编程方式读取任何其他网站的window包含的一些信息。

在我的机器上,即使在Chrome中,你的stackblitz repro也不能像你预期的那样工作。打开一个来源相同的新Window可以修复Chrome或Firefox中的问题:

window.open('https://angular-child-window-load.stackblitz.io', 'kush', 'width=222, height=222, top=222, left=222');

我认为您可能在Chrome配置中修改了一些同源策略,或者可能存在其他本地问题。

问题在于箭头函数。

CCD_ 13引用了CCD_ 14中的一个匿名函数。函数未运行。它等于win.onload = function() {},后者也不会运行。

有效的方法是创建新的功能

win.onload = new function() {
console.log('--- new window loaded ---')
}

最新更新