Взаимодействие фреймов и переменных javascript

Я знаю, что наборы фреймов не совсем передовая технология, но мне пришлось отлаживать старое приложение, и я столкнулся с неожиданным поведением.

Вот несколько простых 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 является зарезервированным ключевым словом? И почему это открытие новой вкладки, а не сломанный скрипт?


person Joffrey Schmitz    schedule 03.07.2018    source источник


Ответы (1)


var name, если используется как глобальный, совпадает с window.name.

window.name — это свойство, которое содержит имя Рамка.

Если вы измените имя на такое, которое не соответствует target (например, с submenu на why), то соответствующей цели нет, поэтому необходимо создать новую.

person Quentin    schedule 03.07.2018