Javascript partiellement refusé pour une page d'une boutique (professionnelles)

Signaler
Messages postés
5
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
21 février 2010
-
Messages postés
5
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
21 février 2010
-
suite à un problème avec du javascript et dans le cadre d'une activité professionnel, j'ai choisi votre forum afin de vous demander conseil. Je compte beaucoup sur vous car la situation est assez pénible.

J'ai donc une activité professionnelle sur ebay, et afin d'embellir ma boutique, j'ai souhaité réaliser une page d'accueil un peu recherchée et attrayante et qui permette de présenter les produits plus originalement.

Après plus de 200 heures de travail (!!) et je crois, un résultat plutôt abouti, j'ai donc voulu ajouter la page comme il est possible de faire, mais malheur, les scripts ne sont pas autorisés. En réalité...pas totalement.


Pour faire simple, les scripts font références à un carrousel et un slide, utilisant jcarousellite et jquery-1.3.2.min que j'ai agrémenté d'un plugin permettant l'affichage d'informations au passage de la souris.

J'ai constaté qu'en premier lieu la publication de la page posait problème à partir du moment ou le fichier était appelé à l'extérieur de la page html. J'ai donc intégré les scripts directement.
Il y a une avancé mais le problème persiste toujours.
J'ai alors entrepris d'identifier ce qui pouvait causer le refus et en ce qui concerne le plugins permettant l'affichage d'informations, en supprimant dans le code "replace("px",""))+parseInt(l.css("padding-top").replace("px",""))-1;l" cela n'atteignait pas son fonctionnement et permettait le chargement de la page.

Le soucis est que je ne connais rien en javascript, et il me reste 2 scripts qui causent problème (le carousellite et jquery-1.3.2.min qui ce dernier est assez fourni). J'ai essayé sur le carrousel d'indentifier le problème mais le simple fait de supprimer "eval(function(p,a,c,k,e,r)" suffit à anéantir le plugin, pourtant rien que cette partie du code bloque la parution sur la page.

Seriez-vous identifier quelles seraient les parties du code qui causent problème à ebay? serez-vous me proposer un code qui permet le bon fonctionnement des plugins et l'acceptation sur ebay?

Quel solution auriez-vous à me proposer?

J'espère qu'en connaisseurs vous aurez des solutions.

Cordialement.

8 réponses

Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
Bonjour,
le simple fait de supprimer "eval(function(p,a,c,k,e,r)"...
normal cela fait partie intégrante du code PACKER, code compressé, voir dean.edwards.name/packer/
;O)
Messages postés
5
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
21 février 2010

Bonjour,

je reviens vers vous car le problème a été identifié et partiellement résolu. Ceci dit, il reste des parties de code de jquery qui causent problème. Le dernier plugin ayant été remplacé par un code non compressé le problème est résolu pour celui-ci.

Concernant jquery, le problème vient de la fonction "replace." Sous le conseil d'un personne, j'ai alors remplacé le maximum de fonction replace par "parseInt(l.css("padding-top"))". Ce qui a réglé le problème pour une grande majorité; Ceci dit, il reste 8 fonctions replace dans le code (très chargé) que je n'arrive pas à remplacer. Aurez-vous une solution?

Voici les parties de code où se trouve les fonctions replace restantes :
(je vous communique de "gros paquets", sait-on jamais, la partie à remplacer est peut-être longue)

replace(/([A-Z])/g,"-$1").toLowerCase();var getComputedStyle=document.defaultView.getComputedStyle(elem,null);if(getComputedStyle&&!color(elem))ret=getComputedStyle.getPropertyValue(name);else{var swap=[],stack=[];for(var a=elem;a&&color(a);a=a.parentNode)stack.unshift(a);for(var i=0;i<stack.length;i++)if(color(stack)){swap[i]=stack[i].style.display;stack[i].style.display="block";

 

.....

 

replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!tags.indexOf("<tr")&&[2,"","
"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"","
"]||!tags.indexOf("<col")&&[2,"<colgroup>","</colgroup>
"]||jQuery.browser.msie&&[1,"div
","
"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);

 

.....

 

replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(value!=undefined)elem name =value;return elem name ;}},trim:function(text){return(text||"").

 

.....

 

replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array.constructor!=Array)for(var i=0,length=array.length;i<length;i++)ret.push(array[i]);else

ret=array.slice(0);return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]==elem)return i;return-1;},merge:function(first,second){if(jQuery.browser.msie){for(var i=0;second[i];i++)if(second[i].nodeType!=8)first.push(second[i]);}else

for(var i=0;second[i];i++)first.push(second[i]);return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done id ){done id =true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv&&callback(elems[i],i)||inv&&!callback(elems[i],i))ret.push(elems[i]);

 

.....

 

replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret= context ,done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false;var re=quickChild;var m=re.exec(t);if(m){nodeName=m[1].toUpperCase();

 

.....

 

replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))? oid :[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";

 

.....

 

replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];

 

.....

 

replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;




Je précise que les codes passent sur ebay en supprimant les fonctions replace, c'est le seul problème qui demeure encore à régler.

Merci à vous,

Cordialement.
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
Bonjour,
le problème vient de la fonction "replace."
je ne suis pas un spécialiste des RegExp, mais certaines peuvent cependant être facilement remplacées
suppression des \ et autre re2
.replace(/\\/g, "")
à remplacer par
.split('\\').join('')
idem pour
.replace(re2,"")
à remplacer par
.split(re2).join('')
plus hasardeux car aucun contrôle => potentiel plantage, convertie une chaine STYLE en une chaine JAVASCRIPT, exemple background-color en backgroundColor
.replace(/-([a-z])/ig,function(all,letter){ return letter.toUpperCase();})
par
str = str.split('-');
str = str[0] +str[1].charAt(0).toUpperCase() +str[1].substr(1);
l'inverse convertie une chaine JAVASCRIPT en une chaine STYLE
.replace(/([A-Z])/g,"-$1").toLowerCase();
je te laisse la faire
et pour celle la
.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag)...etc...
il faut voir sur le forum Regex, ils auront surement une solution...
j'allais oublier
.replace(/^\s*,\s*/,"")
qui supprime les espaces en tête et en fin d'une chaine, il doit bien exister des exemples...

Je pense néanmoins quand mettant en commentaire un certains nombre cela devrait fonctionner quand même, car peut de chance de tout utiliser dans un bibliothèque de cette taille, à condition de le faire sur une source dépacktée et bien indentée...
Bonne continuation
;O)
Messages postés
5
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
21 février 2010

Fantastique!!

Bonjour et merci!

J'ai remplacé toutes les 8 fonctions replace par textuellement : split('\\').join('') et cela fonctionne et n'atteint pas le plugin!!

Par contre, ça créé un trouble apparemment avec ce qui est défini dans le css. En effet, le container du carrousel est plus large et décalé et le contenu plus espacé, le slide est en bas de page et sur la page les liens se sont déplacés...
Avez-vous une explication et cela peut-il être corrigé?

Petit bémol mais je suis encouragé par tout ces problèmes déjà résolus (sur de très long script), après avoir fait un "épluchage" de code paquet par paquet, j'ai identifié 4 lignes dont le contenu bloque la mise en ligne sur ebay.
(j'ai bien vérifié que c'était vraiment les seuls et donc le dernier problème)
Voici les lignes en questions :

jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)


[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}")


ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();xml.open(s.type,s.url,s.async,s.username,s.password);try{if(s.data)xml.setRequestHeader("Content-
Type",s.contentType)

throw"parsererror";if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[]


Si besoin, je peux vous communiquer ce qui précède ces lignes.

Merci à vous,

Cordialement.
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
...le container du carrousel est plus large et décalé et le...
je ne suis pas plus surpris que cela vu l'usine à gaz qui doit reformater pas mal de chose et ce au vue des fonctions
.replace(/-([a-z])/ig,function(all,letter){ return letter.toUpperCase();})
et
.replace(/([A-Z])/g,"-$1").toLowerCase();
quant à la deuxième partie difficile de dire ce qui fait planter le script par Ebay
;O)
Messages postés
5
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
21 février 2010

Bonsoir,

j'ai repris le code en appliquant ce que vous m'avez suggéré de faire de meilleur façon que ce que j'avais fait, à savoir remplacer tout par split('\\').join('') et le résultat est parfait et permet d'identifier que seul les lignes

replace(/([A-Z])/g,"-$1").toLowerCase()

replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});


restent un problème. En effet, je ne parviens pas à appliquer ce que vous m'avez suggéré et leurs modifications entrainent les problèmes "d'affichage" décrits précédemment.

Qu'auriez-vous comme code pour remplacer ces 2 lignes?

Merci à vous,

Cordialement.
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
Bonjour,
.replace(/([A-Z])/g,"-$1").toLowerCase() comme je te l'ai signalé plus haut permet de convertir une chaine de style JS en un chaine de style CSS, c'est l'inverse de la commande .replace(/-([a-z])/ig,function(all,letter){ return letter.toUpperCase();}); qui elle permet de convertir une chaine de style CSS en chaine de style JS.
c'est 2 fonctions peuvent être remplacées par le code suivante
//----------------------------------------------------------------------------
// .replace(/-([a-z])/ig,function(all,letter){ return letter.toUpperCase();}); 
// convertie une chaine CSS en chaine JS
// ex : border-bottom-color -> borderBottomColor
//----------------------------------------------------------------------------
var szTmp = "border-bottom-color";
//-- recup sous forme de tableau
szTmp = szTmp.split('-');
//-- longueur du tableau
var iMax = szTmp.length;
//-- mise en MAJUSCULE de la 1st lettre sauf 1st index
for( var i = 1; i < iMax; i++){
  szTmp[i] = szTmp[i].charAt(0).toUpperCase() +szTmp[i].substr(1);
}
//-- reconstitution de la chaine au format JS
szTmp = szTmp.join('');

pour l'une et...
//----------------------------------------------
// .replace(/([A-Z])/g,"-$1").toLowerCase(); 
// convertie une chaine JS en chaine CSS
// ex : borderBottomColor -> border-bottom-color
//----------------------------------------------
var szTmp = "borderBottomColor";
var szNew = szTmp;
//-- caractere de test
var szMin = "@";
var szMax = 'a';
//-- longeur chaine
var iMax  = szTmp.length;
for( var i = 0; i < iMax; i++){
  //-- si caractere MAJUSCULE
  if(( szTmp.charAt(i) < szMax) && ( szTmp.charAt(i) > szMin)){
    //-- ajout - et mise en minuscule de la lettre
    szTmp = szTmp.substring(0 , i) +'-' + szTmp.charAt(i).toLowerCase() + szTmp.substring( i+1, iMax);
    //-- nouvelle longueur de la chaine
    iMax  = szTmp.length;
  }
}

pour l'autre...
et alors la fameuse...
.replace(/(<(\w+)[^>]*?)\/>/g, function (all, front, tag) {
            return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? all : front + "></" + tag + ">";
          });
quant à elle s'assure de la conformité au langage HTML en supprimant le slash avant la fin de la balise et en ajoutant la balise de fermeture, cela ne concernant pas les balise reprise dans le test tag.match...
exemple :
si en entrée on a
<option value="test"/>
en sortie on obtient
<option value="test"></option>

Conclusion si ton document est VALIDE tu dois pouvoir la mettre en commentaire...ou tu peux toujours développer la fonction réalisant la même chose...

PS : au fait qu'en disent les intervenants sur RegEx
;O)
Messages postés
5
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
21 février 2010

Bonsoir,

merci pour votre aide.

Concernant cette ligne :
.replace(/-([a-z])/ig,function(all,letter){ return letter.toUpperCase();});
je l'ai supprimé hier (sans dommage)

Concernant le reste, je veux bien essayer mais je vous rappelle que je n'ai pas de connaissances en javascript.

Pour par exemple :
.replace(/([A-Z])/g,"-$1").toLowerCase()
qui est d'ailleurs précédé de :
name=name.
je le remplace par
function replace1(szTmp)
puis j'appelle cette fonction dans
<script type="text/javascript">
$(function() {


en écrivant avec votre code en dessous?
 $(replace1).ready(function(){ 


Concernant l'autre ligne
.replace(/(<(\w+)[^>]*?)\/>/g, function (all, front, tag) {
            return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? all : front + "></" + tag + ">";
          });

quel code pourrait la remplacer?

Merci à vous,

Cordialement