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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top