我有这两页:
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加载到page1.html的#wrap元素中。注意,page2.html包含两个带有alert()函数调用的SCRIPT元素-一个在页面的HEAD中,另一个在页面的BODY中。
问题:
在Firefox 3.9,IE9 beta,Chrome(最新)和Opera 11中,两个警报都将执行。
在Safari 5中,仅执行第二个警报。
这是Safari错误吗?
最佳答案
似乎这是Safari问题,但可能不是错误(并且可能在其他浏览器中发生):
jQuery使用浏览器的.innerHTML属性解析检索到的文档并将其插入到当前文档中。在此过程中,浏览器经常从文档中过滤元素,例如<html>, <title>, or <head>
元素。结果,由.load()检索的元素可能与由浏览器直接检索的文档不完全相同。
http://api.jquery.com/load/
我猜想这适用于任何使用.load()
的时间,而不仅是在获取片段时。但是我认为最好,因为您正在将内容拉入不包含<body>
标记的<head>
元素中?