2010-07-05 224 views
1

当我使用document.write时,整个页面变为空白,只显示广告。试图写js使整个页面变为空白

function __adthis(id) { 
    $.getJSON('banner.php', function (data) { 
     var adNum = Math.floor(Math.random() * data.ban.length); 
     document.write("<SCRIPT TYPE='text/javascript'> SRC='+data.ban[0].link+'><\/SCRIPT>"); 
    }); 
} 

这是一个测试, 这是一个测试, 这是一个测试, 这是一个测试,

<div id="res"><script>`__adthis();`</script></div> 

回答

3

不要使用document.write。相反,使用DOM方法来创建一个<script>元素,并将其添加到div:

var e = document.createElement('script'); 
e.setAttribute('type', 'text/javascript'); 
e.setAttribute('src', data.ban[0].link); 
document.getElementById('res').appendChild(e); 
+0

感谢,这将有助于我在未来编,但IM仍然得到同样的问题之前:( – jay 2010-07-05 04:12:10

+0

同样的问题,这意味着页面再次变为空白? – casablanca 2010-07-05 04:14:26

+0

是的,它还是一片空白。 – jay 2010-07-05 04:20:27

0

HTML

<div id="ad_goes_here" /> 

的JavaScript

function __adthis(id){ 
    $.getJSON('banner.php', function(data) { 
     var adNum = Math.floor(Math.random()*data.ban.length); 
     $("#ad_goes_here").html("<SCRIPT TYPE='text/javascript' SRC='+data.ban[0].link+'><\/SCRIPT>"); 
    }); 
} 
0

只是为什么document.write()没有一个侧面说明按预期工作。该W3C spec定义是这样:

写文本字符串()所开打开的文档 流

Mozilla developer docs加上这句话:

写入一个文件那已经加载了 而没有调用document.open() 会自动执行 document.open调用。一旦你有 写完,建议通过 调用document.close(),告诉 浏览器完成加载页面。 您编写的文本被解析为 文档的结构模型。

换句话说,使用document.write()一旦已经呈现的文档触发document.open() call其中:

打开用于写入的文件流。如果 文件存在于目标中,则此 方法将清除它。