Défaut d'affichage sur IE8 [Résolu]

Messages postés
268
Date d'inscription
lundi 9 janvier 2006
Statut
Membre
Dernière intervention
19 janvier 2017
- - Dernière réponse : PetoleTeam
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
- 31 oct. 2010 à 15:41
Je désire afficher dans le même élément
, un texte préformaté qui donne soit la version VBScript, soit la version Javascript d'un code ASP.
Pour cela j'utilise deux variables chaînes : textJS et textVB dans lesquelles les sauts de lignes sont générés par des "\n", la chaîne étant
placée à l'intérieur d'un élément HTML .
La bascule d'un texte à l'autre se fait à partir d'un click sur un élément qui prend la valeur "Afficher le code en Javascript" lorsque le code affiché est du VBscript et "Afficher le code en VBscript" lorsque le code affiché est du Javascript.
Dans l'événement onload de l'élément , je lance la fonction une première fois pour afficher le code en VBscript.
Le code s'affiche correctement sur IE8, Firefox, Chrome (tous les sauts de lignes sont effectués).
Par contre lorsque je clique sur le bouton pour afficher le code en Javascript :
- Sur Firefox et Chrome tout se passe normalement
- Sur IE8, tous les sauts de lignes commandés par les \n ont disparu (en fait, ils n'ont pas disparu, ils ont été basculés en fin de chaîne)

Quelqu'un a t'il déjà constaté ce bug?...
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
268
Date d'inscription
lundi 9 janvier 2006
Statut
Membre
Dernière intervention
19 janvier 2017
2
3
Merci
La séquence \r\n ne fonctionnant pas mieux que la séquence \n\r, je viens de résoudre le problème avec ce petit script :
auparavant, je crée une variable globale :
var ie=false;
Ensuite dans ma fonction d'affichage du code, j'inclus ces instructions :

if (navigator.appName=="Microsoft Internet Explorer"&&ie==false) {
textJS=textJS.replace(/\n/g,"
");
textVB=textVB.replace(/\n/g,"
");
ie=true;
}
Avec ceci, le séquence \n est remplacée par un élément
une seule fois et tout fonctionne.

Par contre, je confirme que dans une fonction alert(), les \n provoquent bien des sauts de lignes avec Internet Explorer.

Je persiste donc à croire que le comportement d'Internet Explorer n'est pas normal dans cette séquence.

Merci tout de même d'avoir essayé d'apporter des solutions à ce problème....

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 187 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_jperre
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
10
0
Merci
Bonjour,
attention ne pas oublier les \r sous IE

;O)
Commenter la réponse de PetoleTeam
Messages postés
268
Date d'inscription
lundi 9 janvier 2006
Statut
Membre
Dernière intervention
19 janvier 2017
2
0
Merci
J'ai essayé de remplacer "\n" par "\n\r" cela ne fonctionne pas.
D'autre part, dans ma page HTML j'ai les éléments suivants :





Mon programme insère la chaîne de caractères avec la propriété innerHTML de l'élément .

J'ai essayé d'insérer le texte directement dans l'élément en faisant :


Dans ce cas c'est encore pire car le texte supprime tous les sauts de lignes dès l'utilisation de la fonction liée à l'événement onload de l'élément .

Pour moi, il s'agit du bug d'Internet Explorer.
Commenter la réponse de cs_jperre
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
10
0
Merci
Bonjour,
dans l'ordre c'est \r\n

[i][b]


/b/i
n'est pas une bonne idée

Comment récupéres tu les lignes de code ?

Qu'obtiens tu lorsque tu fait un alert(Code.split('\n').length);

Pour moi, il s'agit du bug d'Internet Explorer.
non puisque cela marche au début...

J'avais fait un truc comme ceci dans une de mes sources
//---------------------
function Affiche_Code(){
  var S_Obj = document.getElementsByTagName('script');
  var szTmp  = new String(S_Obj[0].text);
  var szFind = new RegExp("\<","gi");
  var szTmp = szTmp.replace( szFind, "<");
  document.write( '<script type="text/javascript">' +szTmp +'<script><\/pre>');
}


;O)
Commenter la réponse de PetoleTeam
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
10
0
Merci
Bonjour,
Par contre, je confirme que dans une fonction alert(), les \n provoquent bien des sauts de lignes avec Internet Explorer.
pas seulement IExplorer mais TOUS les navigateurs
...essaies ce code sur les différents navigateurs
<html>
<head>
<script type= "text/javascript">
alert("Texte avec un\npassage à la ligne type '\\n'");
alert("Texte avec un\rpassage à la ligne type '\\r'");
</script>
</head>
  </html>
nota : \r\n est valide sous IExplorer et Opera

Ta façon de procéder fait que sous IExplorer tu perds l'indentation de ton code.

Le format de sortie de ton code dépend également du format avec lequel ton éditeur enregistre les fichiers, Windows, UNIX ou Mac, modifiant entre autre les line endings.

En insérant les textes en modifiant le innerHTML de l'objet de destination tu t'exposes à des surprises, cette technique étant fortement utilisé mais pas forcément recommandable, bien que très pratique.

Il existe une méthode, createTextNode de l'objet document qui rempli ce rôle à ravir et en respectant la structure du DOM.

En relisant je présumes(???) que tu insères les code grâce à un document.write, pourquoi dans ce cas ne pas tout insérer puis cacher/afficher ce qui t'intéresses suivant le besoin.

Je te livres ce petit code pour test, c'est assez instructif suivant les navigateurs et les formats d'enregistrement.
<html>
<head>
<script type ="text/javascript">
//----------------
function GetCode(){
  var oScript = document.getElementsByTagName( 'script');
  var szTmp = new String( oScript[0].text);
  return( szTmp);
}
</script>
</head>

Ecriture par createTextNode


Ecriture par innerHTML


Ecriture Directe

<script type="text/javascript">
  //-- Get le Code
  var S_Obj = document.getElementsByTagName('script');
  var szTmp = GetCode();
  //-- Ecriture directe
  document.write( '' +szTmp+'<\/pre>');
  //-- Ecriture createTextNode W3C
  var oPre = document.getElementById( 'P_TEXT');
  oPre.appendChild( document.createTextNode( szTmp));
  //-- Ecriture innerHTML
  oPre = document.getElementById( 'P_INNER');
  oPre.innerHTML = szTmp;
</script>

</html>

Le principal restant que ce que tu voulais faire fonctionne !
;O)
Commenter la réponse de PetoleTeam