Cargue JavaScript después de cargar la página
-
28-10-2019 - |
Pregunta
He leído muchos temas y he probado muchas cosas, pero no puedo obtener lo que quiero. Acabo de mover mi código JS al final de la página y ahora obtengo algunos errores.
Así es como se ve mi página:
<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>
En Fonctions.js tengo mi código de 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;
//-->
}
La idea era tener el mismo código para AdSense en un solo lugar, pero no puedo hacer que se cargue después del archivo fonctions.js
Intenté diferir = "diferir", window.onload ...
¿Algunas ideas? Gracias
Entiendo este error en Firebug: Error: Adsense no está definido
PD: Me gustaría evitar usar jQuery (para evitar hacer páginas demasiado grandes)
ACTUALIZAR:
<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>
En fonctions.js Si pongo el siguiente código, se muestra el "OK":
function adsense(){
alert ("ok");
}
Sin embargo, si tengo este código, el anuncio no se muestra:
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;
}
Supongo que es un problema de Google ... el código no se puede cargar de esta manera ...? Si pongo el código de adsense en la página (debajo de la llamada, donde lo hace alerta ('aquí'); ) se muestra bien ... así que mi código de adsense es correcto
ACTUALIZACIÓN: Finalmente he cambiado la solución, he puesto el código en un archivo .html y lo incluyo usando PHP. Entonces ya no está en mi archivo JS. Gracias por tu ayuda de todos modos.
Solución
window.onload
espera una devolución de llamada de función; Sin embargo, estás ejecutando adsense
con adsense()
, y adsense
no devuelve una función; por lo tanto, window.onload
lo descartará. Cambiar a:
window.onload = adsense;
ACTUALIZAR
La respuesta anterior debe descartarse, pero la estoy dejando para que las personas puedan saber que window.onload
espera una devolución de llamada de función :)
Manten eso en mente defer
En el elemento de script instruirá al navegador que espere hasta que la página se haya cargado para ejecutar el script; Sin embargo, tu fonctions.js
está en el src
atributo de tu último script
etiqueta; Por lo tanto, su script diferido probablemente se ejecutará antes adsense
se ha definido, porque el navegador hará una solicitud HTTP para recuperar su script. Esto permitirá que los scripts diferidos continúen ejecutándose mientras adsense
no está definido. Prueba esto en lugar de su guión diferido original:
<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>
ACTUALIZAR
Olvidé que el script Difer no es compatible con nada fuera de IE. Por lo tanto, el problema de aplazamiento no debe estar en juego aquí; Sin embargo, probé el siguiente código en FF y Chrome, y funciona:
<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>
Otros consejos
window.onload = adsense();
llamadas adsense()
inmediatamente y asigna su valor de devolución a onload
.