我正在尝试通过删除所有可能由广告脚本制作的 document.write() 来减轻我的用户生活(通过避免渲染阻塞)。
原来的作品是这样的:
var ad_tmstp=Math.round(Math.random()*10000000000),
sas_masterflag=1;
function adscript(ad_pageid,ad_formatid,ad_target)
{
var scripts = document.getElementsByTagName( 'script' );
var currentScript = scripts[ scripts.length - 1 ];
if (ad_masterflag==1) {ad_masterflag=0;ad_master='M';} else {ad_master='S';};
document.write('<scr'+'ipt src="http://www.ads.com/call/pubj/' + ad_pageid + '/' + ad_formatid + '/' + ad_master + '/' + ad_tmstp + '/' + escape(ad_target) + '?"></scr'+'ipt>');
}
这是主广告函数,用于生成唯一的广告 url,document.write() 将其写入 DOM,并使其响应执行。
在需要插入广告的站点中调用此主函数:
<script type="text/javascript">
ad_pageid='16645/120305';
ad_formatid=7366;
ad_target='';
adscript(ad_pageid,ad_formatid,ad_target);
</script>
当页面加载时,主脚本被执行,导致 document.write() 发生。动态脚本被加载,它本身被执行并以一个讨厌的结尾
[...]Ad innerCode creation[...]
if(typeof(ad_ajax)!='undefined'&&ad_ajax)
{ad_appendToContainer(1234,innerCode);}else{document.write(innerCode);}
恶心到要认真看。。。
所以,到目前为止我一直在尝试:
var script = document.createElement('script');
script.type = 'text/javascript';
script.defer= "true";
script.src = 'http://www.ads.com/call/pubj/' + ad_pageid + '/' + ad_formatid + '/' + ad_master + '/' + ad_tmstp + '/' + escape(ad_target) + '?';
currentScript.parentNode.insertBefore( script, currentScript.nextSibling );
HTML 渲染是完美的:#1 创建 #2。但是,由于某种原因,包含应该生成广告内容的最终 document.write() 的#2 没有执行。
我可能会错过什么?谢谢。