首页 > 解决方案 > 子窗口加载事件在 Firefox 上不起作用

问题描述

当使用window.open('', 'name')加载事件打开一个空白子窗口时,它在 Firefox 中不起作用。虽然在 chrome 中它确实有效。

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

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

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

标签: javascriptangular

解决方案


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

在我的机器上,即使在 Chrome 中,您的 stackblitz repro 也无法正常工作。在 Chrome 或 Firefox 中打开一个Window具有相同来源的新文件可以解决此问题:

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

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


推荐阅读