広告スクリプトによって作成された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は実行されません。
何が紛失する可能性がありますか?ありがとう。
申し訳ありませんが、私は完全に理解していません。新しいscript要素を正しく追加します(src属性が正しいことを確認できますか?src属性を新しいウィンドウに読み込むとどうなりますか?)。しかし、正しいスクリプトが追加されている間、コードは実行されませんか?エラーはスローされませんか? – Pantelis
それはまさに何が起こるかです。新しいウィンドウのsrc属性には、広告プロバイダから生成されたjavavascriptソースコードが表示され、広告の生成と挿入が行われます。 – pixelboy