JavaScript没有';当通过jQuery&x27加载整个页面时,不能在Safari中执行;s load()方法

JavaScript没有';当通过jQuery&x27加载整个页面时,不能在Safari中执行;s load()方法,javascript,jquery,safari,Javascript,Jquery,Safari,我有两页: page1.html $(function(){$('#wrap').load('page2.html');}); page2.html 警报(“第2页标题”); 第2页 警报(“第2页正文”); 如您所见,我正在将整个page2.html加载到page1.html的#wrap元素中。请注意,page2.html包含两个带有alert()函数调用的脚本元素——一个在页面的头部,另一个在页面的主体中 问题: 在Firefox 3.9、IE9测试版、Chrome(最新版本)和

我有两页:

page1.html


$(function(){$('#wrap').load('page2.html');});
page2.html


警报(“第2页标题”);
第2页

警报(“第2页正文”);
如您所见,我正在将整个page2.html加载到page1.html的#wrap元素中。请注意,page2.html包含两个带有alert()函数调用的脚本元素——一个在页面的头部,另一个在页面的主体中

问题:

在Firefox 3.9、IE9测试版、Chrome(最新版本)和Opera 11中,都会执行警报。 在Safari 5中,仅执行第二个警报


这是一只狩猎虫吗

这似乎是Safari的问题,但可能不是bug(可能发生在其他浏览器中):

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


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

这似乎是Safari的问题,但可能不是bug(可能发生在其他浏览器中):

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


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

不幸的是,在将文档插入文档时,浏览器之间的行为并不一致。我不认为您可以将其称为bug,因为您正在尝试无效的HTML,因此更正(如果有)将留给实现。“你愿意考虑丑陋的解决方案吗?”帕特里克说,这个问题的解决方案(显然)是把所有的脚本元素放在文档的正文里(不管它们在哪里)<代码>:/>代码>是的,如果你能够改变响应服务器端,那么(或者更恰当地只发送想要的内容)。这是显而易见的解决方案。不幸的是,在将文档插入文档时,浏览器之间的行为并不一致。我不认为您可以将其称为bug,因为您正在尝试无效的HTML,因此更正(如果有)将留给实现。“你愿意考虑丑陋的解决方案吗?”帕特里克说,这个问题的解决方案(显然)是把所有的脚本元素放在文档的正文里(不管它们在哪里)<代码>:/>代码>是的,如果你能够改变响应服务器端,那么(或者更恰当地只发送想要的内容)。这是显而易见的解决办法,答案很好。应该使用片段标识符,如:
load('page2.html#content')
,或者让page2.html只是一个html片段,而不包含文档的开头部分。帮助我找到问题的解决方案,谢谢。。。回答得很好。应该使用片段标识符,如:
load('page2.html#content')
,或者让page2.html只是一个html片段,而不包含文档的开头部分。帮助我找到问题的解决方案,谢谢。。。
<!DOCTYPE html>

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

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