0

我正在尝试通过删除所有可能由广告脚本制作的 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 没有执行。

我可能会错过什么?谢谢。

4

1 回答 1

1

如果要消除所有document.write()呼叫,只需执行以下操作:

document.write = function() {};

而且每个document.write()电话都不会做任何事情:)

(也许我只是误解了你,因为它很简单;))

于 2011-06-17T22:21:49.933 回答