charger javascript après le chargement de la page
-
28-10-2019 - |
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.
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
.