首页 > 解决方案 > HTML 链接未在目标框架中打开

问题描述

最近有人向我寻求有关一组 HTML 页面的帮助,但未能按预期工作。该设置由一个框架集组成,其中某个框架中显示的链接应该在另一个框架中打开。这应该由锚元素上的目标属性或包含链接的页面中具有目标属性的基本元素来完成。

问题是链接没有在所需的目标框架中打开,而是在不同的选项卡中打开。

经过一些分析,我发现这种行为是由 Javascript 变量“name”的存在引起的,该变量存在于最初加载到目标框架中的页面上。如果该变量的值与目标框架的名称不匹配,则会在新选项卡上打开链接。如果它与目标框架名称匹配,则在目标框架中打开链接,如预期的那样。

这种情况在至少三种浏览器(尝试过的 Firefox、Chrome 和 Edge)的最新版本中始终如一。

我想知道为什么它会这样工作。

这是该问题的小型复制品(也可在此处获得),其中包含一个框架集、三个带有初始内容的框架和两个链接。带有 的第一个链接target="two"在“第二”帧中打开。但是带有 的第二个链接target="three"不会在“第三帧”中打开,而是在新选项卡中打开。显然,这取决于该框架的初始内容(three.html)中 Javascript 变量“名称”的值。但为什么?

索引.html

<html>
  <frameset rows="33%,33%,*">
    <frame name="one"   src="one.html">
    <frame name="two"   src="two.html">
    <frame name="three" src="three.html">
  </frameset>
</html>

一个.html

<html>
  <body>
    frame "one"
    <br>
    <a target="two" href="content.html">show content (target="two")</a>
    <br>
    <a target="three" href="content.html">show content (target="three")</a>
  </body>
</html>

二.html

<html>
  <body>
    frame "two"
    <script>
      <!--
      var name = "two";
      //-->
    </script>
  </body>
</html>

三.html

<html>
  <body>
    frame "three"
    <script>
      <!--
      var name = "two";
      //-->
    </script>
  </body>
</html>

内容.html

<html>
  <body>
    content
  </body>
</html>

标签: javascripthtmlframeset

解决方案


这样做的原因是通过name在页面中设置变量,您正在覆盖该Window.name变量。

Window.name变量是系统用来确定框架名称的变量。当您覆盖并更改此值,然后尝试使用旧值到达框架时,您将被重定向到新选项卡。


推荐阅读