框架集和JavaScript变量交互

时间:2018-07-03 15:52:51

标签: javascript html frameset

我知道框架集并不是完全先进的技术,但是我不得不调试一个旧的应用程序,并且遇到了意外的行为。

以下是一些简单的HTML页面来显示此行为。

index.html:

<html>
  <frameset rows="22,*" border="0">
    <frame name="menu" src="menu.html" marginheight=0 marginwidth=0>
    <frame name="submenu" src="content1.html">
  </frameset>
</html>

menu.html:

<html>
  <body>
    <table width=100% border=0 spacing=1>
      <tr>
        <td><a href="content1.html" target="submenu">Content 1</a></td>
        <td><a href="content2.html" target="submenu">Content 2</a></td>
      </tr>
    </table>
  </body>
</html>

content1.html:

<html>
  <body>
    <p>Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.</p>
  </body>
</html>

content2.html:

<html>
  <body>
    <p>Seasonal, whipped java aftertaste lungo ristretto, a turkish chicory affogato saucer. Medium, spoon et skinny americano cappuccino lungo dripper.</p>
  </body>
</html>

该行为是预期的:单击菜单链接时,子菜单的内容将更新。

现在,我在content2.html的正文中添加一行:<script>var name = "why" ;</script>

如果单击“内容2”链接,则会刷新内容,但是从现在开始,当我单击任意链接时,框架的内容会在新标签页中打开。 我可以在任何现代浏览器(Chrome,Firefox,Edge等)中重现此行为:“主要”脚本中的name JavaScript变量会更改框架集的行为。

有人对此有解释吗?我不认为name是保留关键字吗?以及为什么要打开这个新标签页而不是损坏脚本?

1 个答案:

答案 0 :(得分:3)

var name(如果用作全局变量)与window.name相同。

window.name是保存框架名称的属性。

如果您将名称更改为与target不匹配的名称(例如,从submenuwhy),则没有匹配的目标,因此必须使用新的目标已创建。