Javascript 帧间通信

Javascript 帧间通信,javascript,alert,communication,frames,Javascript,Alert,Communication,Frames,我正试图简化我的问题,我认为没有比这更简单的了: <html> <frameset rows = "50%,50%" name="proof"> <frame src="one.html" name="one"> <frame src="two.html" name="two"> </frameset> </ht

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

<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>

第1帧
第2帧
这是我加载框架集时看到的:

如果我用“第2帧”的方式编辑文件:

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

第2帧
警报(顶部2.名称);
重新加载框架集时,我看到:

到目前为止,一切正常。但是,如果我以另一种方式编辑带有“Frame 2”的文件:

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

第2帧
警报(top.one.name);
尽管按照互联网上每个人的建议做了,但没有出现警报。另一个框架也会发生同样的情况:它可以显示自己的名称,但不能显示另一个(或框架集)的名称


为什么呢?这两个框架如何沟通?

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

我尝试了许多变体,最重要的是,我将两个警报放在同一个html文件中。我注意到显示其自身名称的警报只有在它是第一个时才能正确执行。所以我猜在另一个警报中的某个地方有一个JS错误,事实上确实有一个——我最终在Firefox控制台中找到了这个错误。正如我所怀疑的,这是由浏览器安全设置引起的,在另一个线程中可以找到一些好的解决方案:

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

我想你知道FAME显然不受欢迎(支持iframes)?我意识到这不是对你问题的回答,但你可能想研究使用iframes。好吧,如果框架无法解决问题,我将切换到iframes。更重要的是,框架可能会在任何时候停止在任何浏览器上工作,所以如果这是一个提供服务的网站,现在就值得考虑切换。不,这是供内部使用的。但除此之外,我想知道我的代码有什么问题。它在任何浏览器上都不起作用。顺便说一下,在你写了这些之后,我尝试切换到iFrame,但行为没有改变:iFrame也可以显示自己的名称,但不能显示其他名称,这就是我需要的。也许我的浏览器的设置中有什么东西?