使用window.open('', 'name')
打开空白子窗口时,其加载事件在Firefox中不起作用。虽然在铬,它确实工作。
请参阅我的stackblitz演示-在chrome中,您可以看到控制台日志消息,但在Firefox中则看不到。
此外,Firefox中的readyState
没有按预期工作,也没有更新。
我错过了什么?如何解决这个问题?
根据MDN文章,window.open
返回WindowProxy
实例,该实例代理Window
对象包含的所有属性,包括onload
和addEventListener
。代理的主要目标是限制新创建的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 ---')
}