2011-06-17 28 views
0

広告スクリプトによって作成されたdocument.write()をすべて削除して、ユーザーの生活を楽にする方法(レンダリングのブロックを避ける)を探しています。このような回避策document.write関数

のorignal作品:

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>'); 
} 

これはDOMに独自の広告のURLを生成するために使用されるマスター広告機能、のdocument.write()それはある、と彼は応答を実行します。このマスター関数の呼び出しは、広告を挿入する必要があるサイトで行われ

<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は実行されません。

何が紛失する可能性がありますか?ありがとう。

+0

申し訳ありませんが、私は完全に理解していません。新しいscript要素を正しく追加します(src属性が正しいことを確認できますか?src属性を新しいウィンドウに読み込むとどうなりますか?)。しかし、正しいスクリプトが追加されている間、コードは実行されませんか?エラーはスローされませんか? – Pantelis

+0

それはまさに何が起こるかです。新しいウィンドウのsrc属性には、広告プロバイダから生成されたjavavascriptソースコードが表示され、広告の生成と挿入が行われます。 – pixelboy

答えて

1

あなたはこの行い、すべてのdocument.write()のコールを排除したい場合:

document.write = function() {}; 

を、各document.write()呼び出しは何もしません:)

を、それはこの単純だから(多分私はちょうどあなたを誤解。 ))

+0

それはそうではありません。私はdocument.write()をオーバーライドしようとしているのではなく、ブラウザのレンダリング技術をブロックしないでください。 – pixelboy

+0

それでは、ちょうどあなたが望むことをする関数に置き換えてください;) – levu

+0

それは何ですか[...] var script = document.createElement( 'script'); [...] does ... – pixelboy