Shinji49
Messages postés18Date d'inscriptionmardi 17 août 2004StatutMembreDernière intervention25 juin 2009
-
8 juin 2008 à 15:30
Shinji49
Messages postés18Date d'inscriptionmardi 17 août 2004StatutMembreDernière intervention25 juin 2009
-
11 juin 2008 à 17:25
Bonjour,
Je travaille sur un editeur Javascript depuis quelques temps et je me casse les dents pour le rendre compatible avec Internet Explorer.
En effet, j'ai programmé une fonction qui utilise la fonction execCommand sur un iframe et lorsque je l'appelle avec un onclick sur une liste (<li onclick="mafonction();"></li>) sous Mozilla -> sa fonctionne mais sous Internet Explorer -> sa ne fonctionne pas.
J'ai essayé de remplacer le onclick par onmouseover et la sa fonctionne pour les deux navigateurs ! Mais moi, ce que je veut, c'est que la fonction soit exécutée lorsque l'on clique.
Sinon, j'ai essayé de remplacer dans le onclick ma fonction par l'appel d'une fenetre alert, et sa fonctionne ! lol
J'en déduit donc : que "execCommand" n'est pas compatible avec "onClick" sous Internet Explorer (j'ai testé que sur la version 7 !). Et j'en appel à une solution !
Merci.
A voir également:
OnClick et execCommand incompatibles sous Internet Explorer
Shinji49
Messages postés18Date d'inscriptionmardi 17 août 2004StatutMembreDernière intervention25 juin 2009 11 juin 2008 à 17:25
Bonjour,
Après avoir regardé la construction de certains scripts. Je me suis rendu compte que sous Internet Explorer 7, le execCommand dans le onClick placé sur un élément de liste ou une cellule de tableau ne fonctionnait pas !
Au contraire, à travers un bouton ou même un lien, cela fonctionne.
Ta solution Bultez n'y change rien car le problème n'est pas là !
Bref, j'utilise la balise HTML de lien "A" et sa marche très bien. Le plus dur sera la cellule de tableau.
Je pense enfin que ce phénomène est connue, que je ne doit pas regarder du bon coté.
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 8 juin 2008 à 16:59
Bonjour,
>>j'en déduit donc : que "execCommand" n'est pas compatible avec "onClick"
sous Internet
>> Explorer (j'ai testé que sur la version 7 !). Et j'en
appel à une solution !
très très mauvaise déduction !
( les bugs n'existent pas.... sur aucun navigateur ! )
si ça ne fonctionne pas, c'est que celui qui code fait une erreur... toujours !!!!
/* Editeur ****************************************************************/
var bar ='
';
for(var i = 0;i < barTab.length;i++){ if(i 1 || i 4)bar +='
';
bar +='
';
for(var i2 = 0;i2 < barTab[i].length;i2++){
var valeur = barTab[i][i2];
if(valeur =='police' || valeur =='taillePol')bar +='
'+foncTab[valeur][1]+'
[javascript:'+this.id+'.selOuv(\''+valeur+'\'); ]';
else bar +='[javascript:'+this.id+'.commanD(\''+foncTab[valeur][0]+'\',\''+valeur+'\'); ]';
}
bar +='
';
}
var iFrame ='EditeurCod
';
var editeur ='
'+ bar + iFrame +'
';
this.champ.style.display ='none';
this.champ.insertAdjacentHTML('afterEnd',editeur);
/**************************************************************************/
<textarea name="texti" id="texti">test</textarea>
<script>
var texti = new EditeurCod({id:'texti', dimX:'800px', dimY:'400px', police:'Calibri', taillePol:'3'});
</script>
</html>
Voila. Donc, lorsque le script est exécuté sous Internet Explorer, il y a le fameux bug dont je parlais. Il est vrai que cela ne vient pas de IE mais d'où vien-il ?
Pour voir le bug, tapez du texte dans l'iframe. Sélectionnez le texte tapé puis cliquez sur un des selects et enfin selectionnez une valeur. Vous allez voir que le execCommand n'a pas été appliqué sur votre sélection et que le curseur s'est replacé au début ! De même, si votre curseur est positionné à la fin et que vous n'avez pas fait de sélection.
Donc, si quelqu'un sait d'où cela vient, ce serait super !
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 9 juin 2008 à 09:37
comme d'habitude....
dans un 1er temps, refus de montrer son code... on se demande pourquoi....
et dans un 2ème temps : tiens... v'la tout ! et démerde !
1° tu aurais pu faire l'affort de faire l'extrait nécessaire
et de le poster ici ( M'écrire est inutile ! c'est mieux
dans ce forum, ça sert à d'autres , et les autres intervenants
peuvent aussi aider bien plus qu'efficacement !)
2° tu n'as probablement pas fait l'effort non plus d'aller
voir le lien que je te donnais....
tu y aurais vu :
Shinji49
Messages postés18Date d'inscriptionmardi 17 août 2004StatutMembreDernière intervention25 juin 2009 9 juin 2008 à 12:56
LOL !
Salut,
1° -> il s'agit bien d'un extrait ! lol
2° -> Si si, j'y suis allé, mais quand j'ai vu que j'avais déjà ton script en Local, j'ai pas pensé a regarder le code.
Bref : concernant ton code, j'essaye ce soir et je te dit car la je doit repartir.
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 9 juin 2008 à 13:35
je ne sais pas ce que c'est "un extrait lol" ??? ça veut dire quoi ?
un "extrait du code" je comprend, tu veux sûrement dire
"un extrait où je ne me suis pas emmerdé, où j'ai tout mis" ?
tout ce que je vois par exemple
c'est combien (?) de lignes css totalement inutiles pour le problème ?
c'est un .js qu'il faut qu'on intégre (!!!) , avec des fonctions
qui n'ont rien à voir avec le souci,
...
>> j'ai pas pensé a regarder le code.
ah ben ! je t'ai pourtant dis qu'il fonctionnait !
et tu ne penses pas à regarder ???? c'est se moquer du monde.
Shinji49
Messages postés18Date d'inscriptionmardi 17 août 2004StatutMembreDernière intervention25 juin 2009 9 juin 2008 à 18:58
Salut,
Tu est borné ? lol -> Je viens même de me rendre compte que j'avais tellement
coupé qu'il manquait une fonction pour que le script fonctionne !
Pour le CSS, l'idée est de pouvoir essayer à l'aise ! Car
sans le CSS, sa aurait été le fouillis sur la page et là j’aurais eu comme
réflexion -> « tu n’aurais pas pu rendre sa plus présentable ? »
De plus, sa prend pas plus de temps de sélectionner le CSS
avec le reste du code HTML.
Concernant ton script : je pensais que tu voulais que
je le télécharge et que je me casse !
Vraiment, sur ce coups la, je trouve la critique facile.
Mais bon, laissons de coté ce que je pense.
J’ai adapté ton code, et je suis arrivé à une situation que
j’ai déjà rencontrée ! Sous Internet Explorer, la frame n’est plus
éditable et n’est plus manipulable. Alors que lorsque je remets mon « getElementById »
sa marche. Encore une chose d’ambigu que je n’arrive pas à comprendre.
V'la tout ! Le code présenté ci dessous à été modifié en fonction de l'aide apporté. J'ai de plus rajouté un bout de code important. (En ROUGE !)
// JavaScript Document
/* insertAdjacentHTML() - Thor Larholm *************************************
* insertAdjacent%() est une méthode supportée par seulement IE.
***************************************************************************/
if(typeof HTMLElement!= "undefined"
&& !HTMLElement.prototype.insertAdjacentElement){
HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode){
switch(where){
case 'beforeBegin':
this.parentNode.insertBefore(parsedNode,this)
break;
case 'afterBegin':
this.insertBefore(parsedNode,this.firstChild);
break;
case 'beforeEnd':
this.appendChild(parsedNode);
break;
case 'afterEnd':
if(this.nextSibling)this.parentNode.insertBefore(parsedNode,this.nextSibling);
else this.parentNode.appendChild(parsedNode);
break;
}
}
HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr){
var r = this.ownerDocument.createRange();
r.setStartBefore(this);
var parsedHTML = r.createContextualFragment(htmlStr);
this.insertAdjacentElement(where,parsedHTML)
}
HTMLElement.prototype.insertAdjacentText = function(where,txtStr){
var parsedText = document.createTextNode(txtStr)
this.insertAdjacentElement(where,parsedText)
}
}
/*******************************************************************************
* EditeurCod
*******************************************************************************/
EditeurCod = function(args){
// Appel méthode : initiatilisation.
this.iniT(args.id, args.dimX || '600px', args.dimY || '400px', args.police || 0, args.taillePol || 0);
}
// Méthode : initialisation.
EditeurCod.prototype.iniT = function(id,dimX,dimY,police,taillePol){
// Variables.
this.id = id;
this.dimX = dimX;
this.dimY = dimY;
this.champ = document.getElementById(this.id);
this.contenu = this.champ.value;
this.prop = 0;
this.policeSel = 0;
this.taillePolSel = 0;
this.navig = navigator.appName;
// Fonctions (TAB).
foncTab = new Array();
// ID - Propriété - Titre.
foncTab['police'] = ['fontname','Police du texte',1]; // Police.
foncTab['taillePol'] = ['fontsize','Taille du texte',1]; // Taille police.
this.foncTab = foncTab;
// Polices (TAB).
var polTab = ['Arial','Calibri','Courier New','Georgia','Sans Serif','Tahoma','Times New Roman','Trebuchet MS','Verdana'];
this.polTab = polTab;
// Barres (TAB).
barTab = new Array();
barTab[0] = ['police','taillePol'];
/* Editeur ****************************************************************/
var bar ='
';
for(var i = 0;i < barTab.length;i++){ if(i 1 || i 4)bar +='
';
bar +='
';
for(var i2 = 0;i2 < barTab[i].length;i2++){
var valeur = barTab[i][i2];
if(valeur =='police' || valeur =='taillePol')bar +='
'+foncTab[valeur][1]+'
[javascript:'+this.id+'.selOuv(\''+valeur+'\'); ]';
else bar +='[javascript:'+this.id+'.commanD(\''+foncTab[valeur][0]+'\',\''+valeur+'\'); ]';
}
bar +='
';
}
var iFrame ='EditeurCod
';
var editeur ='
'+ bar + iFrame +'
';
this.champ.style.display ='none';
this.champ.insertAdjacentHTML('afterEnd',editeur);
/**************************************************************************/