jQuery.load不会使用document.write执行javascript

时间:2010-04-13 16:38:55

标签: jquery ajax load

我正在尝试使用jQuery.Load来加载一个包含document.write的广告调用,并且由于某些原因它无法使用,或者至少在firefox中重新加载包含整个广告的页面。

以下是代码的简化版本。

DynamicLoad.html

<html>
<head>
<script src="http://www.prweekus.com/js/scripts.js?3729212881" type="text/javascript"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jQuery Load of Script</title>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
   google.load("jquery", "1.3.2");
</script>
<script type="text/javascript">
   $(document).ready(function(){
    $("#myButton").click(function() {
        $("#myDiv").load("source.html");
    });
   });
</script>
</head>
<body>
<button id="myButton">Click Me</button>
<div id="myDiv"></div>

<div id="slideAdUnit"></div>

</body>
</html>

Source.html

<script language="javascript" type="text/javascript">
  document.write('<script language="javascript" type="text/javascript"><\/script>');
</script>
test

点击FF中的按钮后,浏览器就会等待加载。有什么想法吗 ?

最终我会在document.write中传递一个指向我们广告服务器的src元素。

感谢您的帮助。

4 个答案:

答案 0 :(得分:5)

页面加载完成后,您无法使用document.write:如果您这样做,它将替换页面内容。

使用jQuery动态加载脚本的最简单方法是:

$.getScript( url );

另一种方法是创建一个新的<script>元素并将其添加到文档中。

答案 1 :(得分:1)

writeCapture.js(完全披露:我是作者)可以解决这个问题:

$("#myDiv").writeCapture().load("source.html");

答案 2 :(得分:0)

您需要在DOM中插入脚本块。你不能像这样把它写入文档。

使用:$(document.createElement('script'));,然后设置所需的属性。

var newBlock = $(document.createElement('script'));
$(newBlock).attr('src','http://...')

答案 3 :(得分:0)

我发现与 IE 相同的问题 - 它不会执行使用 document.write 加载的脚本,而是创建脚本 DOM 元素工作得很好。

在您的情况下,如果只有一个脚本要加载 Source.html ,只需修改它以动态创建脚本 DOM 元素。它可以在 IE FF 中使用。但是,如果要动态加载多个脚本文件,则可能无法使用此技术,因为此技术无法保证 IE 中的执行顺序。

请访问 Google 并搜索“更快的网站”,您将收到一篇关于动态脚本加载的非常好的文章。

顺便说一句,我不明白为什么 IE 不会使用 document.write执行加载脚本。

如果我使用 document.write ,我的 FF 也会等待(同样的事情发生在你身上!!)。我不确定原因,它可能是非常低级别的。所以,请不要将它与 FF 一起使用。如果您已经确定原因,请分享。