загрузить javascript после загрузки страницы - PullRequest
0 голосов
/ 05 декабря 2011

Я прочитал много тем и перепробовал много вещей, но я не могу получить то, что хочу. Я только что переместил свой 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;
    //-->
    }

Идея состояла в том, чтобы иметь один и тот же код для adsense только в одном месте, но я не могу загрузить его после файла fonctions.js

Я попытался defer = "defer", window.onload ...

Есть идеи? Спасибо

Я получаю эту ошибку в Firebug: Ошибка: adsense не определен

PS: я бы хотел не использовать Jquery (чтобы не делать страницы слишком большими)

UPDATE:

<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 ... Код не может быть загружен таким образом ...? Если я добавлю код AdSense на странице (под вызовом - где вы делаете предупреждение («здесь»); ), он будет хорошо отображаться ... Таким образом, мой код AdSense правильный

UPDATE: Я наконец изменил решение, я поместил код в файл .html и включил его с помощью php. Так что это больше не в моем файле JS. В любом случае спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011

window.onload ожидает обратного вызова функции; однако вы выполняете adsense с adsense(), а adsense не возвращает функцию; следовательно, window.onload откажется от этого. Изменить на:

    window.onload = adsense;

UPDATE

Приведенный выше ответ следует отбросить, но я оставляю его так, чтобы люди могли знать, что window.onload ожидает обратного вызова функции:)

Имейте в виду, что defer в элементе script будет указывать браузеру ждать, пока страница не будет загружена для выполнения скрипта; однако ваш fonctions.js находится в атрибуте src вашего последнего тега script; следовательно, ваш отложенный скрипт, скорее всего, будет выполнен до того, как будет определен adsense, потому что браузер отправит http-запрос для получения вашего скрипта. Это позволит отложенным сценариям продолжить выполнение, пока adsense не определен. Попробуйте это вместо вашего оригинального отложенного сценария:

    <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>

UPDATE

Я забыл, что отложенный скрипт не поддерживается ни в чем, кроме 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>
1 голос
/ 05 декабря 2011

window.onload = adsense(); вызывает adsense() немедленно и присваивает его возвращаемое значение onload.

...