Carica JavaScript dopo aver caricato la pagina
-
28-10-2019 - |
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.
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
.