Взаимодействие между Frameset и Javascript - PullRequest
0 голосов
/ 03 июля 2018

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

Вот несколько простых 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, ...): переменная javascript name в «основном» скрипте изменяет поведение набора фреймов.

У кого-нибудь есть объяснение этому? Я не думаю, что name является зарезервированным ключевым словом? А почему эта новая вкладка открывается, а не битый скрипт?

1 Ответ

0 голосов
/ 03 июля 2018

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

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

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

...