通过 jQuery 的 load() 方法加载整个页面时,JavaScript 不会在 Safari 中执行

Šim*_*das 1 javascript safari jquery

我有这两页:

页面1.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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在将整个 page2.html 加载到 page1.html 的 #wrap 元素中。请注意,page2.html 包含两个带有 alert() 函数调用的 SCRIPT 元素 - 一个在页面的 HEAD 中,另一个在页面的 BODY 中。

问题:

在 Firefox 3.9、IE9 beta、Chrome(最新)和 Opera 11 中,这两个警报都会执行。在 Safari 5 中,只执行第二个警报。

这是 Safari 的错误吗?

Rob*_*Rob 5

似乎这是一个 Safari 问题,但可能不是错误(并且可能发生在其他浏览器中):

jQuery 使用浏览器的 .innerHTML 属性来解析检索到的文档并将其插入到当前文档中。在这个过程中,浏览器经常会从文档中过滤元素,比如<html>, <title>, or <head>元素。因此, .load() 检索到的元素可能与浏览器直接检索文档时不完全相同。

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

我猜这适用于任何时候.load()使用,而不仅仅是在获取片段时。但我认为这是最好的,因为您将内容拉入一个<body>不包含<head>标签的元素中?