Question

Nous avons écrit un plugin dans l'éditeur de texte Xinha pour gérer les notes de bas de page. Vous pouvez jeter un oeil à: http://www.nicholasbs.com/xinha/examples/Newbie.html

Afin de gérer certains problèmes liés à la manière dont Webkit et IE gèrent les liens en fin de ligne (vous ne pouvez pas utiliser le curseur pour sortir du lien sur la même ligne), nous insérons un élément vide et déplaçons la sélection. à cela, que s'effondrer à droite. Cela fonctionne bien dans Webkit et Gecko, mais pour une raison quelconque, moveToElementText est en train de cracher une exception d'argument invalide. Peu importe l'élément que nous lui transmettons, la fonction semble être complètement brisée. Cependant, dans d’autres chemins de code, cette fonction semble fonctionner.

Pour reproduire l’erreur en utilisant le lien ci-dessus, cliquez dans la zone de saisie de texte principale, tapez quelque chose, puis cliquez sur l’icône de page jaune avec le signe plus vert, tapez quelque chose dans la boîte de dialogue Boîte à lumière, puis cliquez sur Insérer. Voici un exemple du code à l'origine du problème:

  if (Xinha.is_ie)
  {
    var mysel = editor.getSelection();
    var myrange = doc.body.createTextRange();
    myrange.moveToElementText(newel);
  } else
  {
    editor.selectNodeContents(newel, false);
  }

Le code en question réside dans svn à l'adresse: https://svn.openplans.org/svn/xinha_dev/InsertNote

Ce plugin est construit à partir d'une branche de Xinha disponible auprès de svn à l'adresse: http://svn.xinha.webfactional.com/branches/new-dialogs

Était-ce utile?

La solution

Il n'est pas visible dans l'extrait ci-dessus, mais newel a été ajouté au dom à l'aide d'un autre élément lui-même ajouté au DOM. Lors de l'insertion d'un élément dom, vous devez ré-extraire votre descripteur si vous souhaitez référencer ses frères et sœurs, car le descripteur n'est pas valide (je ne suis pas sûr, mais je pense qu'il fait référence à un élément DOM à l'intérieur d'un fragment de document et non celle qui se trouve à l’intérieur du document.) Après avoir ré-extrait le descripteur à partir de l’opération d’insertion, moveToElementText a cessé de générer une exception.

Autres conseils

J'ai eu la malheureuse expérience de déboguer cette exception IE à plusieurs reprises tout en implémentant un éditeur WYSIWYG, et cela revient toujours à accéder à une propriété sur un nœud DOM (tel que .parentNode) ou à transmettre un nœud DOM à une fonction (tel que moveToElementText) alors que le noeud DOM n’est pas actuellement dans le document en cours de rendu.

Comme vous l'avez dit, le nœud DOM est parfois un fragment de document supprimé du fichier "réel". DOM étant rendu par le navigateur, et parfois le nœud n'a tout simplement pas encore été inséré. Quoi qu'il en soit, il existe un certain nombre de propriétés et de méthodes sur les nœuds DOM qui ne sont pas accessibles en toute sécurité dans IE6 tant que le nœud n'a pas été correctement inséré et restitué dans le paramètre "réelle". DOM.

La vraie raison est que souvent cette manifestation de "Argument non valide" d'IE6 l'exception ne peut pas être protégée par try / catch.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top