Aller au contenu

Charger les pubs aprés le reste de la page / Ajax - JQuery?


gobi

Sujets conseillés

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 :nonono: 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.

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

  • 2 months later...

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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é par Ben S.
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 :(

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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é par Ben S.
Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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é par Ben S.
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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>

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...