我正在尝试使用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元素。
感谢您的帮助。
答案 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 一起使用。如果您已经确定原因,请分享。