Обходной путь document.write - PullRequest
0 голосов
/ 18 июня 2011

Я пытаюсь найти способ облегчить жизнь моих пользователей (избегая блокировки рендеринга), удалив все 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.Но по какой-то причине # 2, содержащий окончательный document.write (), который должен генерировать рекламный контент, не выполняется.

Чего мне может не хватать?Спасибо.

1 Ответ

1 голос
/ 18 июня 2011

Если вы хотите исключить все document.write() вызовы, просто сделайте это:

document.write = function() {};

, и каждый document.write() вызов не будет ничего делать:)

(возможно, я простонеправильно понял вас, потому что это так просто;))

...