0

私は多くのトピックを読み、多くのことを試しましたが、私が望むものを得ることができません. ページの最後に js コードを移動したところ、エラーが発生しました。

これは私のページがどのように見えるかです:

<html>
   <head>
      bla bla
   </head>
<body>
   bla bla
   <div class="advertising">
      <script type="text/javascript" defer="defer">
          window.onload = adsense();
      </script>
      <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
      </script>
   </div>

  <script language="javascript" type="text/javascript" src="fonctions.js"></script>
</body>
</html>

fonctions.js には、Google Adsense コードがあります。

 function adsense(){
    <!--
    google_ad_client = "pub-xxxxx";
    /* 120x600, date de création 11/06/11 */
    google_ad_slot = "xxxxx";
    google_ad_width = 120;
    google_ad_height = 600;
    //-->
    }

アイデアは、アドセンスの同じコードを1か所だけにすることでしたが、ファイルfonctions.jsの後にロードできません

defer="defer"、window.onload を試してみました...

何か案は?ありがとう

Firebug でこのエラーが発生します: エラー: adsense が定義されていません

PS: Jquery の使用は避けたい (ページが大きくなりすぎないようにするため)

アップデート:

<script type="text/javascript" defer="defer">
        (function() {  // 'sandbox' javascript pattern to prevent clobbering
                       // global namespace
            var executeProxy = function() {
                if (typeof adsense === 'function') {  // adsense is configured
                    adsense();
                } else {  // adsense is not configured;
                          // therefore, try again later
                    setTimeout(executeProxy, 50);
                }
            };
            executeProxy();
        }());
    </script>
    <script language="javascript" type="text/javascript" src="fonctions.js"></script>

fonctions.js に以下のコードを入れると「ok」が表示されます。

function adsense(){
alert ("ok");
}

ただし、このコードがある場合、広告は表示されません:

function adsense(){
google_ad_client = "pub-xx";
/* 120x600, date de création 16/04/11 */
google_ad_slot = "xxx";
google_ad_width = 120;
google_ad_height = 600;
}

私の推測では、それは Google の問題だと思います...この方法ではコードを読み込めません...? ページにアドセンス コードを配置すると (呼び出しの下 - alert('here');を実行する場所)、適切に表示されます...したがって、私のアドセンス コードは正しいです

更新: 最終的にソリューションを変更しました。コードを .html ファイルに入れ、php を使用してインクルードしました。そのため、もうjsファイルにはありません。とにかく助けてくれてありがとう。

4

2 に答える 2

3

window.onload関数のコールバックが必要です。ただし、 で実行adsenseadsense()adsenseいて、関数を返しません。したがって、それwindow.onloadを破棄します。への変更:

    window.onload = adsense;

アップデート

上記の回答は破棄する必要がありますがwindow.onload、関数コールバックを期待していることを人々が知ることができるように残しています:)

deferon script 要素は、ページがロードされてスクリプトが実行されるまでブラウザに待機するように指示することに注意してください。ただし、最後のタグfonctions.jsの属性にあります。したがって、遅延スクリプトは 、定義される前に実行される可能性が高くなります。これは、ブラウザーがスクリプトを取得するために http 要求を行うためです。これにより、が定義されていない間、遅延スクリプトを実行し続けることができます。元の遅延スクリプトの代わりにこれを試してください。srcscriptadsenseadsense

    <script type="text/javascript" defer="defer">
        (function() {  // 'sandbox' javascript pattern to prevent clobbering
                       // global namespace
            var executeProxy = function() {
                if (typeof adsense === 'function') {  // adsense is configured
                    adsense();
                } else {  // adsense is not configured;
                          // therefore, try again later
                    setTimeout(executeProxy, 50);
                }
            };
            executeProxy();
        }());
    </script>

アップデート

スクリプトの延期は IE 以外ではサポートされていないことを忘れていました。したがって、遅延の問題はここでは関係ありません。ただし、FF と Chrome で次のコードをテストしたところ、動作しました。

    <script type="text/javascript" defer="defer">
        (function() {  // 'sandbox' javascript pattern to prevent clobbering
                       // global namespace
            var executeProxy = function() {
                if (typeof adsense === 'function') {  // adsense is configured
                    adsense();
                } else {  // adsense is not configured;
                          // therefore, try again later
                    setTimeout(executeProxy, 50);
                }
            };
            executeProxy();
        }());
    </script>
    <script type="text/javascript">
        function adsense() {
            alert('here');
        }
    </script>
于 2011-12-05T18:50:45.350 に答える
1

window.onload = adsense();adsense() はすぐに呼び出し、その戻り値を に代入しますonload

于 2011-12-05T18:51:36.947 に答える