gobi Posté 6 Octobre 2008 Posté 6 Octobre 2008 Salut! Pendant chargement de ma page (php) il y a des "lags" lors de la récupération des informations sur les sites extérieurs (pubs flash notamment) et alors l'affichage se fait en 2-3 morceaux, la bannière puis les différentes colonnes, et cela peut prendre plusieurs secondes, entre 3 et 10 secondes avant que la pub apparaisse. J'ai essayé en Ajax avec jQuery , ça donne ça : $(document).ready(function(){ $.ajax({ url: './includes/ads_topAjax.php', dataType: "html", timeout: 1000, error: function(){ $('#header_ads').html('Error'); }, success: function(result){ $('#header_ads').html(result); } }); }) Le fichier ads_topAjax.php que j'appele renvoie le code javascript pour loader ma pub que voila : <?php echo "<script type='text/javascript'><!--//<![CDATA[ var m3_u = (location.protocol=='https:'?'https://www.xxx.com/openx/www/delivery/ajs.php':'http://www.xxx.com/openx/www/delivery/ajs.php'); var m3_r = Math.floor(Math.random()*99999999999); if (!document.MAX_used) document.MAX_used = ','; document.write (\"<scr\"+\"ipt type='text/javascript' src='\"+m3_u); document.write (\"?zoneid=1&target=_blank\"); document.write ('&cb=' + m3_r); if (document.MAX_used != ',') document.write (\"&exclude=\" + document.MAX_used); document.write (\"&loc=\" + escape(window.location)); if (document.referrer) document.write (\"&referer=\" + escape(document.referrer)); if (document.context) document.write (\"&context=\" + escape(document.context)); if (document.mmm_fo) document.write (\"&mmm_fo=1\"); document.write (\"'><\/scr\"+\"ipt>\");//]]>--></script><noscript><a href='http://www.xxx.com/openx/www/delivery/ck.php?n=a9f3f884&cb=333333' target='_blank'><img src='http://www.xxx.com/openx/www/delivery/avw.php?zoneid=1&cb=333333&n=a9f3f884' border='0' alt='' /></a></noscript>";?> Le problème c'est que quand vient le temps de charger la pub elle fait disparaitre le reste de la page et apparait sur un fond blanc. Pensez-vous que c'est du au code javascript ci-dessus, fournis par mon logiciel de ads (openx ou openads) ? Merci d'avance.
Slyghter Posté 7 Octobre 2008 Posté 7 Octobre 2008 Bonjour, Il me semble que le DataType est le type de donnée qu'attend ton ajax en entrer via les data: mavariable. Donc essaye deja d'enlever ton dataType et dit nous ce que cela donne. Ensuite si tu colle directement le code donné par ton "logiciel de ads" dans ton html, tu à un bon résultat ?
Ben S. Posté 16 Décembre 2008 Posté 16 Décembre 2008 Je remonte ce sujet aujourd'hui car j'ai exactement le même problème sur mon site. Gobi, est-ce que tu as trouvé une solution à ces instructions "document.write" qui "effacent" tout le site ? Je commence tout juste mes recherches sur Google, je n'ai pour l'instant pas trouvé de solution concrète. Apparemment, le salut pourrait venir d'une surcharge de la méthode write pour l'adapter à notre cas, mais c'est franchement bourrin et pas super maintenable et je ne me sens pas assez au fait en javascript pour garantir que ma fonction fonctionnera sur tous les navigateurs... SVP, si vous avez des pistes, ou mieux des solutions à me proposer, n'hésitez pas : je dois trouver une solution rapidement ! Merci.
captain_torche Posté 16 Décembre 2008 Posté 16 Décembre 2008 Selon ce site, il semblerait que le document.write ne possède pas le même comportement selon qu'il est appelé au chargement de la page (remplacement du contenu), ou dans la page même (ajout d'un contenu). Ton problème semble venir de là.
Ben S. Posté 16 Décembre 2008 Posté 16 Décembre 2008 Ahh, en effet, c'est exactement ça... Mais alors comment je peux me débrouiller ? je ne peux pas demander aux régies pub de modifier leur code....
captain_torche Posté 16 Décembre 2008 Posté 16 Décembre 2008 Tu copies-colles le code dans ta page et ça devrait fonctionner, non ?
Ben S. Posté 16 Décembre 2008 Posté 16 Décembre 2008 Bah non : c'est justement, c'est ce que je veux éviter ! Ma bannière est tout en haut mon site, donc au début du code HTML. Or, lorsqu'un navigateur charge du javascript, il ne charge aucun autre élément du site. Dans mon cas, la pub de la régie est de plus en plus souvent suuuuppper longue à s'afficher.... donc l'affichage de mon site est également bloqué suuuuuuppper longtemps. Voilà pourquoi je tente de charger le code (HTML+javascript) fourni par la régie en toute fin de code HTML, et en asynchrone pour ne plus avoir de lenteurs.
captain_torche Posté 16 Décembre 2008 Posté 16 Décembre 2008 Woops, au temps pour moi. Si tu utilises jquery, il va falloir que tu modifies légèrement le code de ta régie pour remplacer les document.write par $('#tondiv').append('ton code html');
Ben S. Posté 16 Décembre 2008 Posté 16 Décembre 2008 bah oui, j'ai bien peur que j'en sois réduit à cette proposition...
Ben S. Posté 16 Décembre 2008 Posté 16 Décembre 2008 (modifié) Aïe.... C'était trop beau pour être vrai : Malheureusement, leur code fait lui-même un document.write ('<scr'+'ipt language="javascript" src="http://......."></scr'+'ipt>'); Je comptais faire un replace à la volée, pour ne pas avoir à réécrire chaque code de ma régie, comme ceci : $.ajax({ data: "id_campagne=<?php echo $id_campagne; ?>", url: "inc.skyscraper.php", cache: false, success: function(data){ $(".large_banniere").append(data.replace('document.write(','$(".large_banniere").append(')); } }); Mais puisque le code ajoute une autre balise <script> avec une source distante, je ne peux pas les empêcher de remettre dans cette nouvelle balise script des "document.write"... ma solution ne fonctionne donc pas... Modifié 16 Décembre 2008 par Ben S.
captain_torche Posté 16 Décembre 2008 Posté 16 Décembre 2008 Tu as essayé ? Parce qu'à partir du moment où tu as placé le code dans le HTML, que le script appelé fasse lui-même un document.write ne fait pas vraiment de différence, logiquement.
Ben S. Posté 16 Décembre 2008 Posté 16 Décembre 2008 oui, j'ai essayé : mon replace fonctionne bien au début et transforme bien le document.write('<scr'+'ipt src="..." [...]'); en $(".large_banniere").append('<scr'+'ipt src="..." [...]'); Mais, le code du script ainsi ajouté, contient lui-même des document.write visiblement, et donc ça continue de tout faire planter, car ceux-ci ne sont pas remplacés... je ne sais pas si c'est possible d'ailleurs.
Kioob Posté 16 Décembre 2008 Posté 16 Décembre 2008 En tous cas perso je n'ai pas trouvé de solution magique à ce gros problème. Le code des régies est complètement obsolète et cela pose effectivement beaucoup de soucis dès lors qu'on essaye de faire les choses proprement
Ben S. Posté 16 Décembre 2008 Posté 16 Décembre 2008 je suis bien d'accord. Je suis en train de tester une version qui créé une iframe en lui affectant comme attribut 'src', l'URL de mon script qui va écrire le code la régie. J'ai l'espoir que le document.write considère qu'il n'a pas besoin de faire de document.open puisqu'il est dans une frame.... ça à l'air de fonctionner, mais j'ai encore quelques soucis... à régler...
Ben S. Posté 16 Décembre 2008 Posté 16 Décembre 2008 (modifié) Arf, j'arrive à quelque chose qui fonctionne, mais il y a 2 petits détails qui m'embêtent : Voici le code javascript à la fin de mon code HTML : <script type="text/javascript">$(document).ready(function () { var sk = document.createElement('iframe'); sk.src = "inc.skyscraper.php?id_campagne=<?php echo $id_campagne_skyscraper; ?>"; sk.width=160; sk.height=600; $(".skycrapper").append(sk);});</script> ma page inc.skyscraper.php est grossomodo ceci : <div id="skyscraper"> <div id="VwP20978Div" name="VwP20978Div" style="display:block;border:0;margin:0;padding:0;"></div><script language="javascript">VwP20978PubClickthruURL="none";VwP20978PubImpressionURL="none";VwP20978Random=Math.random();VwP20978D=false;if(document.location.search.indexOf("P20978D")!=-1){VwP20978D=true;}document.write('<scr'+'ipt language="javascript" src="http://...../script_160_600.js?'+VwP20978Random+'"></scr'+'ipt>');</script><noscript><A HREF="http://....." TARGET="unicastTarget"><img src="http://....jpg" width="160" height="600" border="0"></A></noscript></div> Question 1 : En l'état, ça ne fonctionne pas : il faut que j'entoure le code de ma régie dans mon inc.skyscraper.php par les balises <pre></pre>... vous avez une idée de pourquoi ? Question 2 : avec les <pre></pre> ça fonctionne, mais j'ai une grosse marge intérieure dans mon iframe à gauche et en haut, ce qui me cache une partie de ma bannière, ou alors m'impose des barres de défilement. Même avec les styles, sur le <pre> ou sur l'iframe, je n'arrive pas à dégager ces marges... Une idée ? Modifié 16 Décembre 2008 par Ben S.
captain_torche Posté 16 Décembre 2008 Posté 16 Décembre 2008 Pourquoi ne pas mettre de balises <html>, <head> et <body> dans ton iframe ?
Ben S. Posté 16 Décembre 2008 Posté 16 Décembre 2008 Hmm, bah ça veut pas marcher... avec ou sans les balises HTML, body, head, title quoique... sans le head et title, c'est beaucoup mieux !! je n'ai plus qu'une petite marge à gauche et en haut de 5 à 10 px environs,... je vais fouiller en triturant les styles css...
Ben S. Posté 16 Décembre 2008 Posté 16 Décembre 2008 (modifié) Ca fonctionne !!! merci captain torche !! En forçant le padding et le margin à zéro pour le body, je eux afficher ma bannière comme il faut. J'ai un gros coup de chance sur les liens : ils ne pointent pas dans l'iframe mais bien vers une nouvelle fenêtre... heureusement. Il faut que je vois pour l'autre version de ma bannière et les autres types de bannières (flash statique ou image statiques) si je peux m'en tirer de la même manière... C'est déjà une bonne avancée... il faut aussi que je teste sous IE et et sous Mac.... Modifié 16 Décembre 2008 par Ben S.
Ben S. Posté 16 Décembre 2008 Posté 16 Décembre 2008 Je continue pour tenir au courant les personne qui seraient dans le même cas que moi : J'arrive finalement à intégrer la balise <head> (sans title) sans problème. J'en ai besoin pour y intégrer la balise suivante : <style type="text/css">img{border:0}</style> Ce qui permet d'enlever la bordure aux images de mes bandeaux en gif ou jpeg, car le style initialement prévu en CSS ne s'applique plus dans l'iframe.
Ben S. Posté 16 Décembre 2008 Posté 16 Décembre 2008 Et pour finir, puisque comme d'habitude, sous IE, ça fait pas comme chez tout le monde, il faudra retirer les barres de défilement et les bordures de l'iframe de façon un peu détournée. Ca me donne les scripts suivants : - En javascript à la fin du fichier HTML : var sk = document.createElement('iframe'); sk.src = "inc.publicite.php?id_campagne=<?php echo $id_campagne_skyscraper; ?>"; sk.frameborder=0; sk.scrolling="no"; $(".skycrapper").append(sk); - En php, l'appel du code de la bannière <html style="margin:0;padding:0;"><head><style type="text/css">img {border:0;}</style></head><body style="background-color:#000;border:0;margin:0;padding:0;"><?php // Ici, le code PHP qui va rechercher le code de la bannière. // Ce code peut contenir des instructions javascript du type document.write('Bonjour'), etc...?></body></html>
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant