HTML link 未在目标框架中打开
HTML link does not open in target frame
最近有人向我寻求帮助,但无法按预期工作的一组 HTML 页面。该设置由一个框架集组成,其中 link 显示在某个框架中的应该在其他框架中打开。这应该通过锚元素上的目标属性或包含 link.
的页面中具有目标属性的基本元素来实现
问题是 links 没有在所需的目标框架中打开,而是在不同的选项卡中打开。
经过一些分析,我发现此行为是由 Javascript 变量 "name" 的存在引起的,该变量出现在最初加载到目标框架中的页面上。如果该变量的值与目标框架的名称不匹配,则 link 在新选项卡上打开。如果它与目标框架名称匹配,link 按预期在目标框架中打开。
这种情况在至少三种浏览器的最新版本中一直发生(尝试过 Firefox、Chrome 和 Edge)。
我想知道为什么会这样。
这是该问题的一个小复制品(也可用 here),其中包含一个框架集、三个包含初始内容的框架和两个 link。第一个 link 和 target="two"
在框架 "two" 中打开。但是第二个 link 和 target="three"
不会在框架 "three" 中打开,而是在新选项卡中打开。显然,这取决于该帧 three.html 初始内容中 Javascript 变量 "name" 的值。但是为什么?
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>
two.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>
原因是通过在页面中设置变量 name
,您将覆盖 Window.name
变量。
而 Window.name
变量是系统用来确定框架名称的变量。当您覆盖并更改此值,然后尝试到达具有旧值的框架时,您将被重定向到一个新选项卡。
HTML 文件以框架标签中指定的 link 名称为目标时,无法在该命名框架中打开。问题是加载它的框架正在调用另一个框架来加载新的 html 文件不识别名称,或者找不到按照语法在框架集中指定的命名框架的位置。调用框架的命名没有错误。 link 在调用 html 文档的框架中自行打开。这意味着它在执行 _SELF 时在相同的 window 帧中打开。调用框架及其 HTML 文件和主要是锚标记的代码看不到我调用的 window 框架以加载所需的 HTML 文件并且无法识别我的名称已提供给调用框架。
如何解决.....第一个段落问题。 ?
我重申浏览器没有任何问题。我有最好的应用程序浏览器阵容。所有网页都可以正常执行。
罗斯
最近有人向我寻求帮助,但无法按预期工作的一组 HTML 页面。该设置由一个框架集组成,其中 link 显示在某个框架中的应该在其他框架中打开。这应该通过锚元素上的目标属性或包含 link.
的页面中具有目标属性的基本元素来实现问题是 links 没有在所需的目标框架中打开,而是在不同的选项卡中打开。
经过一些分析,我发现此行为是由 Javascript 变量 "name" 的存在引起的,该变量出现在最初加载到目标框架中的页面上。如果该变量的值与目标框架的名称不匹配,则 link 在新选项卡上打开。如果它与目标框架名称匹配,link 按预期在目标框架中打开。
这种情况在至少三种浏览器的最新版本中一直发生(尝试过 Firefox、Chrome 和 Edge)。
我想知道为什么会这样。
这是该问题的一个小复制品(也可用 here),其中包含一个框架集、三个包含初始内容的框架和两个 link。第一个 link 和 target="two"
在框架 "two" 中打开。但是第二个 link 和 target="three"
不会在框架 "three" 中打开,而是在新选项卡中打开。显然,这取决于该帧 three.html 初始内容中 Javascript 变量 "name" 的值。但是为什么?
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>
two.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>
原因是通过在页面中设置变量 name
,您将覆盖 Window.name
变量。
而 Window.name
变量是系统用来确定框架名称的变量。当您覆盖并更改此值,然后尝试到达具有旧值的框架时,您将被重定向到一个新选项卡。
HTML 文件以框架标签中指定的 link 名称为目标时,无法在该命名框架中打开。问题是加载它的框架正在调用另一个框架来加载新的 html 文件不识别名称,或者找不到按照语法在框架集中指定的命名框架的位置。调用框架的命名没有错误。 link 在调用 html 文档的框架中自行打开。这意味着它在执行 _SELF 时在相同的 window 帧中打开。调用框架及其 HTML 文件和主要是锚标记的代码看不到我调用的 window 框架以加载所需的 HTML 文件并且无法识别我的名称已提供给调用框架。
如何解决.....第一个段落问题。 ? 我重申浏览器没有任何问题。我有最好的应用程序浏览器阵容。所有网页都可以正常执行。
罗斯