我正在尝试新的广告服务,据我所知,他们没有提供加载广告的功能界面。我们希望根据用户的屏幕尺寸显示不同的广告尺寸,此服务要求您为每种尺寸加载不同的.js
网址。
我最初尝试写作:
<script type="text/javascript"><!--
var dochead = document.getElementsByTagName('head')[0];
var newscript = document.createElement('script');
newscript.type = "text/javascript";
newscript.src = '//ads-by.madadsmedia.com/tags/22430/9194/async/' + (screen.width >= 1360 ? '160' : '120') + 'x600.js';
dochead.appendChild(newscript);
//-->
</script>
但我只是得到一个空白页面。我查看了Chrome开发人员工具,似乎正在正确加载他们的脚本。他们的脚本加载了谷歌的其他脚本,他们也出现在DOM中。但是没有广告形象。
当我将脚本更改为:
<script language="JavaScript" type="text/javascript">
var prot = document.location.protocol;
var adwidth = (screen.width >= 1360 ? '160' : '120');
document.write('<script language="JavaScript" type="text/javascript"'); document.write('src="'+prot+'//ads-by.madadsmedia.com/tags/22430/9194/async/'+adwidth+'x600.js">'); document.write('<\/scr' + 'ipt>');
</script>
它运作正常。我一般不喜欢使用document.write
,我想知道为什么在这种情况下需要它?广告服务的脚本广泛使用document.write
,这是为什么?
答案 0 :(得分:4)
因为他们正在使用document.write()
:
http://ads-by.madadsmedia.com/tags/22430/9194/async/160x600.js:
if (!window.ActiveXObject){
document.write("<div style=\"text-align: center; margin: 0px auto; width:160px; height:600px; position:relative;\">");
// etc.
如果document.write()
没有在线运行并且主动“打开”文档,它将破坏那里的内容。因此,在加载后运行脚本会用他们的内容覆盖您的内容。
答案 1 :(得分:2)
如果文档正在加载其就绪状态是交互式的,但是body元素尚未被完全解析。您不能将子项添加到尚未加载的元素。它会导致错误,脚本会停止。
dochead.appendChild(newscript);
快速解决方法是使用body.onload事件运行您的函数。将脚本移动到页面底部可能会有效,但在包含Internet Explorer和操作不当的浏览器的世界中,我认为这不可靠。
答案 2 :(得分:2)
如果他们的脚本使用document.write
,则可能会导致页面变为空白,因为它会覆盖流。
您可以覆盖document.write
作为修复:(但我不会.....)
How to deal with document.write in a script that's added after a page has loaded?