Ajaxで読み込まれたページにGoogle AdSense広告を表示する

こんにちは、ハブラチタテリ。 昨日、不愉快な事実に出会いました。つまり、AdSenseコードはページが読み込まれたときにのみ機能します。 受信したデータに含まれるAdSenseコードをajaxを使用して処理しようとすると、何も発生しません(エラーのみが発生します)。 Googleの読み込み可能なスクリプトはdocument.writeを使用します。これは、ページが読み込まれたときにのみ機能します。 しかし、ページはすでにロードされています。 そして、私は掘り始めました...



始めるために、私はextsrc.jsについての興味深い記事、 実用的で実用的な記事、実用的なコードを見つけました。 ただし、読み込まれたコンテンツに広告ユニットが1つしかない場合は便利です。 その後、問題なく動作します。 このような広告ユニットがあります-2.この方法が機能しないのはなぜですか?



したがって、AdSenseコードは次のように配置されます。







<script type="text/javascript">

google_ad_client = "ca-pub-436345435345";

google_ad_slot = "33454355080";

google_ad_width = 728;

google_ad_height = 90;

</script>

<script type="text/javascript"

src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

</script>













<script type="text/javascript">

google_ad_client = "ca-pub-436345435345";

google_ad_slot = "3345434255080";

google_ad_width = 728;

google_ad_height = 90;

</script>

<script type="text/javascript"

src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

</script>









show_ads.jsスクリプトは、その前の変数(google_ad_client、google_ad_slotなど)をインターセプトして処理し、リセットします。 また、コードは厳密に順番に処理されるため、show_ads.jsには毎回空ではない変数があります。



extsrc.jsを使用すると、ページがレンダリングされた後にshow_ads.jsが起動されます。 AdSenseコード内の変数の名前は同じであり、上から下に割り当てられているため、このスクリプトの最初の実行は最後の変数を処理します。 スクリプトは、最後のブロックのデータに基づいて動作し、すべてをリセットしました。 最後のブロックのバナーのみが表示されますが、最初のブロックの代わりに表示されます。 残りのスクリプトの実行は無意味です;それらのためのデータはありません。



それに、extsrc.jsを使用する場合は、Googleスクリプトのダウンロードコードを変更する必要があります。



<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>





現在: <script type="text/javascript" extsrc="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>





これはすでにルールに違反しているため、コードを変更することはできません。



しかし、たぶん私は出口を見つけました。 ネットワークを掘り下げてみると、あるプロジェクト-writeCaptureに出会いました 。 その機能の1つは、document.writeが存在するJSコードを実行することです。 さらに、このコードは指定されたブロックで実行できます。 使い方はとても簡単です。



$('#').writeCapture().html('<script src="http://.js"></script>');







<script src = " YourScript.js "> </ script>の代わりに、jsコードを挿入できます。



だから、私はajaxデータを取得します。 このデータには、AdSenseコードブロックがあります。 これがid = "Reklama"であるとしましょう。 受信したデータをページのどこかに配置したいと思います。 私は主にjqueryで作業していますが、あらゆる種類のhtml、appendなど 何でも許容しますが、ブロックにコード<script type = "text / javascript">何か</ script>が含まれている場合は、html、appendなどを使用して配置します。 このコードは後でブロックに表示されません。 なぜこれが起こっているのかわかりませんが、誰かがコメントで説明するでしょうか? はい、見た場合、このコードはすぐに機能し、document.write操作が不可能であることに関するエラーが発生します。 結果のコードにコンストラクトを挿入することで解決策を見つけました



document.getElementById('X').innerHTML=" ajax"







このため、このデザインでは、スクリプトは<script type = "text / javascript">何か</ script>とともに変更なしで目的の場所に転送されますが、スクリプトの本文は機能しません。



最後に、最も興味深いのは次のことです。



$('#Reklama').writeCapture().html($('#Reklama').html());







バナーが表示されました。 コードを見ると、すべてが正常に機能していますが、AdSenseコード自体のバナーの前に十分な行がありません。 もちろん、ここには犯罪者はいませんが、芸術のためにいくつかの変更を行います。 htmlの代わりにappendの使用を禁止する人はいません。



$('#Reklama').writeCapture().append($('#Reklama').html());







やった! バナーが表示されます! htmlコードを見てください。 AdSenseコードは公開中です。



しかし、これがすべてではないことが判明しました。 Googleがページのグローバル配列に入力するバナーインプレッションの数、つまり 一種のカウンター。 カウンターが3を超えると、バナーの表示が停止します。 Google、彼のコードの所有者、それは不可能なので、私たちはそれに触れませんでした。 そして、私たちはコードとブラウザの所有者です。 バナーを表示する前に、これを行います。



delete __google_ad_urls;

delete google_iframe_oncopy;

delete google_jobrunner;

delete google_jobrunner;

delete google_persistent_state;

delete google_persistent_state_async;







delete google_num_ad_slots;

delete google_num_0ad_slots;

delete google_prev_ad_slotnames_by_region;

delete google_unique_id;









show_ads.jsコードを完全に理解していなかったという理由だけで、非常に多くの配列を削除しました。 後続のバナー表示で、これらのアレイは正常に復元されます。



すべての変数を調べて、「google」という文字列が見つかった変数を削除できますが、この方法はページに広告があり、他のGoogleストレイ広告がない場合にのみ有効です。



以下に例を示します。

for(ウィンドウ内のvarキー)

{if(key.toLowerCase()。indexOf( 'google')>-1 && key!= 'google_ad_client' && key!= 'google_ad_slot' && key!= 'google_ad_width' && key!= 'google_ad_height')

{window [key] = undefined;}}



ここでは、もちろん、すべてのオブジェクトが無差別にソートされますが、バナー以外にGoogleがページ上にない場合は、それ自体に非常に適しています。 削除ウィンドウ[キー]を使用しなかったことに注意してください。つまり、バージョン9よりも低いため、食べたくありません。



幸運と建設的な批判を私に。



All Articles