10

広告スクリプトタグを動的に追加する必要がある状況にあります。

広告自体は、広告サーバーを指すsrc属性を持つ単純なスクリプトタグです。次に実行される実際のコードは、2段階の試練です。

まず、次のようなdocument.write()があります。

document.write("<iframe id='lctopti2017041855' src='about:blank' style='visibility: hidden;' onload=\"this.style.visibility='visible';\" style='border: 0px; overflow-x: hidden;overflow-y: hidden; width: 100px; height: 400px;' width='100' height='400' scrolling='no' frameborder='0' allowtransparency='true'></iframe>");

次に、次のようになります。

document.getElementById('lctopti2017041855').src = 'http://www.reallylongurl.com/blah.php?whatever=whatever'

これで、ページの読み込み中にdocument.write()を実行しても問題ないようです。しかし、同じ初期タグを取得して$('#somediv')。prepend()内にポップすると、ページ全体が上書きされることを発見しました。

これに対処する方法はありますか?iframe IDとそれに続く広告URLは常に動的であり、最初のスクリプトタグが広告サーバーからJavaScriptを要求したときに生成されます。最初のスクリプトタグに必要なすべての情報が含まれている場合は、$('#anywhere')。prepend()などを使用してdocument.writeを切り替えることができます。最初のスクリプトロードの結果を文字通りスクレイピングしてから結果を処理する以外に、これをどのように解決できますか?

document.write()がページを上書きするのを止め、代わりに呼び出された場所にのみ書き込む方法はありますか?

4

2 に答える 2

14

これは私が以前に成功したことです

var oldWrite = document.write;
var wHtml="";
document.write=function(str) {
  wHtml+=str;
}
// load adcode
$('#somediv').prepend(wHtml);
// optionally reset
document.write = oldWrite;

adcodeがdocument.writeを使用してスクリプトをロードする場合も、これは失敗する可能性があります。その場合は、iFrameを使用してください。これには、iFrameに実行できるすべてのがらくたが含まれているためです。

于 2012-12-08T07:03:02.363 に答える
0

ドキュメントが読み込まれると、document.writeページ全体がフラッシュされます。したがって、ドキュメントのロード後に呼び出される関数には入れないでください。

もっと行動が必要な場合は、他の方法に変更できると思います。

http://javascript.info/tutorial/document-いくつかの情報をdocument.writeここに示します。お役に立てば幸いです。

于 2012-12-08T07:23:43.493 に答える