JavaScript не выполняется в Safari при загрузке всей страницы с помощью метода load () jQuery - PullRequest
1 голос
/ 25 января 2011

У меня есть две страницы:

page1.html

http://vidasp.net/tinydemos/jquery-load-issue/page1.html

<!DOCTYPE html>

<html>
<body>
    <div id="wrap"> </div>

    <script src="jquery.js"></script>
    <script> $(function() { $('#wrap').load('page2.html'); }); </script>
</body>
</html>

page2.html

http://vidasp.net/tinydemos/jquery-load-issue/page2.html

<!DOCTYPE html>

<html>
<head>
    <script> alert('Page 2 HEAD'); </script>
</head>
<body>
    <p> PAGE 2 </p>
    <script> alert('Page 2 BODY'); </script>
</body>
</html>

Как видите, я загружаю весь page2.html в элемент #wrap в page1.html. Обратите внимание, что page2.html содержит два элемента SCRIPT с вызовами функции alert () - один в заголовке страницы, а другой в теле страницы.

Выпуск:

В Firefox 3.9, IE9 beta, Chrome (последняя версия) и Opera 11 выполняются оба оповещения. В Safari 5 выполняется только второе предупреждение.

Это ошибка Safari?

1 Ответ

4 голосов
/ 25 января 2011

Похоже, что это проблема Safari, но, возможно, не ошибка (и может случиться в других браузерах):

jQuery использует свойство браузера .innerHTML для анализа полученного документа и вставки его в текущий документ. Во время этого процесса браузеры часто фильтруют элементы из документа, такие как <html>, <title>, or <head> элементы. В результате элементы, извлекаемые с помощью .load (), могут не совпадать, как если бы документ был получен непосредственно браузером.

http://api.jquery.com/load/

Я предполагаю, что это применимо в любое время, когда используется .load(), а не только при получении фрагментов. Но я думаю, что было бы лучше, так как вы помещаете контент в элемент <body>, который не содержит тег <head>?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...