【问题标题】:HTML link does not open in target frameHTML 链接未在目标框架中打开
【发布时间】:2020-04-11 20:22:32
【问题描述】:

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

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

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

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

我想知道为什么会这样。

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

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

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

three.html

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

content.html

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

【问题讨论】:

  • 我看到你在两个 html 页面中都指定了var name= "two"。也许这就是错误。
  • @MarkSkayff 这正是我要问的。为什么目标帧依赖于目标帧初始内容中变量name的值?请解释为什么您认为这是一个错误。
  • 对于您在这里所说的,我认为 Frame 对象的属性成为框架中正在加载的页面上的全局变量。因此,您可以在脚本本身内控制和修改这些全局变量。
  • 让我尝试在我的环境中复制它。
  • 请注意,the &lt;frame&gt; element has been obsolete 已使用多年,&lt;frameset&gt; 也是如此,不应再使用。

标签: javascript html frameset


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    当以框架标记中指定的链接名称作为目标时,HTML 文件不会在该命名框架中打开。问题是加载它的框架正在调用另一个框架来加载一个新的 html 文件,它无法识别名称,或者它无法按照语法找到框架集中指定的命名框架的位置。调用框架的命名没有错误。该链接本身在调用 html 文档的框架中打开。这意味着它在执行 _SELF 时在同一个窗口框架中打开。调用框架及其 HTML 文件,主要是锚标记的代码,无法看到我正在调用的窗口框架以加载所需的 HTML 文件,并且无法识别我为调用框架提供的名称。

    如何解决.....第一个问题。 ? 我重申浏览器没有任何问题。我有最好的应用浏览器阵容。所有网页都可以正常执行。

    罗斯

    【讨论】:

    • 这是一个新问题吗?如果是这样,请发布一个不同的问题,不要添加作为答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 2020-11-27
    • 2011-12-04
    相关资源
    最近更新 更多