Domanda

Ho letto molti argomenti e ho provato un sacco di cose, ma non riesco a ottenere quello che voglio. Ho appena spostato il mio codice JS alla fine della pagina e ora ricevo alcuni errori.

Ecco come appare la mia pagina:

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

In fonctions.js ho il mio codice Adsense di Google:

 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'idea era di avere lo stesso codice per Adsense in un solo posto, ma non riesco a caricarlo dopo il file fonctions.js

Ho provato Defer = "Defer", Window.Onload ...

Qualche idea? Grazie

Ricevo questo errore in Firebug: Errore: Adsense non è definito

PS: vorrei evitare di usare jQuery (per evitare di rendere le pagine troppo grandi)

AGGIORNARE:

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

in fonctions.js Se metto il seguente codice, viene visualizzato "OK":

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

Tuttavia, se ho questo codice, l'annuncio non viene visualizzato:

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

La mia ipotesi è che sia un problema di Google ... il codice non può essere caricato in questo modo ...? Se inserisco il codice adsense nella pagina (sotto la chiamata - dove lo fai Avviso ('qui'); ) è ben visualizzato ... quindi il mio codice adsense è corretto

Aggiornamento: ho finalmente cambiato la soluzione, ho inserito il codice in un file .html e lo includo usando PHP. Quindi non è più nel mio file JS. Grazie per il tuo aiuto comunque.

È stato utile?

Soluzione

window.onload si aspetta un callback della funzione; Tuttavia, stai eseguendo adsense insieme a adsense(), e adsense non restituisce una funzione; dunque, window.onload lo scaricherà. Cambiare in:

    window.onload = adsense;

AGGIORNARE

La risposta di cui sopra dovrebbe essere scartata, ma la sto lasciando in modo che le persone possano saperlo window.onload si aspetta una richiamata di funzione :)

Tieni presente che defer Sull'elemento di script istruirà al browser di attendere fino a quando la pagina non sarà caricata per eseguire lo script; Tuttavia, il tuo fonctions.js è nel src attributo del tuo ultimo script etichetta; Pertanto, lo script differito molto probabilmente eseguirà prima adsense è stato definito, perché il browser farà una richiesta HTTP per recuperare lo script. Ciò consentirà agli script differiti di continuare a eseguire mentre adsense non è definito. Provalo al posto del tuo script differito originale:

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

AGGIORNARE

Ho dimenticato che lo script Defer non è supportato in nulla al di fuori di IE. Pertanto, il problema di differimento non dovrebbe essere in gioco qui; Tuttavia, ho testato il seguente codice in FF e Chrome e funziona:

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

Altri suggerimenti

window.onload = adsense(); chiamate adsense() subito e assegna il suo valore di ritorno a onload.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top