帧间通信

Communication between frames

我正在尝试简化我的问题,但我认为没有比这更简单的了:

<html>
<frameset rows = "50%,50%" name="proof">
<frame src="one.html" name="one">
<frame src="two.html" name="two">
</frameset>
</html>

<html>
<body>
<H1>Frame 1</H1>
</body>
</html>

<html>
<body>
<H1>Frame 2</H1>
</body>
</html>

这是我在加载框架集时看到的:

[https://ibb.co/LSMpgZF]

如果我用“第 2 帧”这样编辑文件:

<html>
<body>
<H1>Frame 2</H1>
<script>
alert (top.two.name);
</script>
</body>
</html>

然后我重新加载框架集,我看到了这个:

https://ibb.co/Qkkhp69

到目前为止,一切都按预期进行。但是,如果我以其他方式使用“第 2 帧”编辑文件:

<html>
<body>
<H1>Frame 2</H1>
<script>
alert (top.one.name);
</script>
</body>
</html>

尽管完全按照 Internet 上每个人的建议进行操作,但没有出现任何警报。另一个框架也是如此:它可以显示自己的名称,但不能显示其他框架(或框架集的名称)。

这是为什么?两个框架如何通信?

好的,我自己解决了这个问题。

我尝试了很多变体,最重要的是我将两个警报放在同一个 html 文件中。我注意到显示自己名称的警报只有在它是第一个时才会正确执行。所以我猜在另一个警报中某处有一个 JS 错误,确实有一个 - 我最终在 Firefox 控制台中找到了错误。正如我所怀疑的那样,它是由浏览器安全设置引起的,并且可以在另一个线程中找到一些好的解决方案: Disable firefox same origin policy

这对我来说非常有效(因为我使用的是 Firefox): 在 Firefox 68 之后,我需要调整 'privacy.file_unique_origin' -> false(通过打开 'about:config')来解决引入的新 CORS 同源规则的 'CORS request not HTTP'。