Question

J'ai lu beaucoup de sujets et essayé beaucoup de choses, mais je n'arrive pas à obtenir ce que je veux. Je viens de déplacer mon code js à la fin de la page et j'obtiens maintenant des erreurs.

Voici à quoi ressemble ma page:

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

Dans fonctions.js, j'ai mon code 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;
    //-->
    }

L'idée était d'avoir le même code pour adsense à un seul endroit mais je n'arrive pas à le charger après le fichier fonctions.js

J'ai essayé defer="defer", window.onload ...

Des idées? Merci

J'obtiens cette erreur dans Firebug: Erreur: adsense n'est pas défini

PS: je voudrais éviter d'utiliser Jquery (pour éviter de rendre les pages trop grandes)

MISE À JOUR:

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

dans fonctions.js si je mets le code suivant, le "ok" s'affiche:

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

Cependant, si j'ai ce code, l'annonce ne s'affiche pas:

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

Je suppose que c'est un problème de Google ... Le code ne peut pas être chargé de cette manière ...? Si je mets le code adsense dans la page (sous l'appel - où vous faites alerte ('ici'); ) il est bien affiché ... Donc mon code adsense est correct

MISE À JOUR: J'ai finalement changé la solution, j'ai mis le code dans un fichier .html et je l'inclus en utilisant php. Donc ce n'est plus dans mon fichier js. Merci pour votre aide quand même.

Était-ce utile?

La solution

window.onload attend un rappel de fonction; cependant, vous exécutez adsense avec adsense(), et adsense ne renvoie pas de fonction; par conséquent, window.onload supprimera cela. Remplacer par:

    window.onload = adsense;

MISE À JOUR

La réponse ci-dessus devrait être ignorée, mais je la laisse en place pour que les gens sachent que window.onload attend un rappel de fonction :)

Gardez à l'esprit que defer sur l'élément de script demandera au navigateur d'attendre que la page soit chargée pour exécuter le script; cependant, votre fonctions.js est dans l'attribut src de votre dernière balise script; par conséquent, votre script différé s'exécutera probablement avant que adsense n'ait été défini, car le navigateur fera une requête http pour récupérer votre script. Cela permettra aux scripts différés de continuer à s'exécuter tant que adsense n'est pas défini. Essayez ceci à la place de votre script différé d'origine:

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

MISE À JOUR

J'ai oublié que le report de script n'est pris en charge dans rien en dehors d'IE. Par conséquent, la question du report ne devrait pas être en jeu ici; cependant, j'ai testé le code suivant dans FF et Chrome, et cela fonctionne:

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

Autres conseils

window.onload = adsense(); appelle adsense() immédiatement et attribue sa valeur de retour à onload.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top