IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Interpréteur Deguggeur IE11 voit une erreur que je ne comprend pas, non erreur avec Chrome ou FireFox


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 145
    Points : 63
    Points
    63
    Par défaut Interpréteur Deguggeur IE11 voit une erreur que je ne comprend pas, non erreur avec Chrome ou FireFox
    Bonjour,


    Je crée un objet que va comprendre un objet du dom "Range".
    Pour l'initialiser une fois intancié j'écrit var x.range = new Range; (x.range est défini = {}; // not yet determined object, ce qui plante IE11 (erreur445 (non documentée) mais avec le texte : "Cet objet ne gère pas cette action" , pendant que chrome et FireFox exécutent sans problème.
    J'attends de retrouver dans x.range les éléments d'un range non constitué et de disposer de toutes les fonctions de l'objet.

    Voici l'extrait de code (le script a plus de 3000 lignes, ce sont presque les premières, la définition des objets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    var aSelection = function (selName) {
        this.id = ''; 
        this.Name  = selName;
        this.type = ''; 
        this.Text  ='';
        this.Comment ='';
        this.selectedRange = {}; // getRange of selection select one only range into multiple selection
        this.Range = {};  // new Range ;Will get the range when the selection is fixed (supports only one range
           this.Start = {};// in the node but attributes are adapted .todo simplify management
        this.End = {}; // in the node but attributes are adapted  .todo simplify management
        this.autoupd = false;
        this.Node = {}; // Defined after treatment of the Range and add if necessary off an element, by default the Valid HTML which envelops the Range
        this.Node.element = {}; // The Node is the element which is the  closest envelop of the range after analyse
        this.Node.start = {}; // The element which is closest the element  before the beginning of the range can be a copy of AnchorNode of Range
        this.Node.end = {}; // The element which is the closest element  after the end of the range can be a copy of BaseNode of Range
        this.Header = {};
        this.Header.id = '';
        this.Header.xname = ''; // enocoded text of header
        this.Header.JQelement={}; // JQuery selection objet with length = 1
        this.Header.Text='';
        this.Header.level ='';
        this.Layer = {};
        this.Layer.JQelement={}; // JQuery selection object with length = 1 for Layer element
        this.url = ""; // Contains the fragment defined
        this.init = false; // Init is ended validated
        this.locked = false; // The selection is ready for data to be stored and must not be modified (locked) has been frozen 
        this.generated={};
        this.generated.selectionchange = false;
    // Function to check and set coherency
     
    };
     
    /**
     * These vars can be used only to compare data with values not for inherited objects
     * @type {aSelection}
     */
    var curSelection = new aSelection('current');
    curSelection.Range=new Range; // IE js don't accepts inherit objets !!! in ...### as this.Range = new Range should be ???
    var prevSelection = new aSelection('previous');
    prevSelection.Range=new Range;
    var curBkmRange = new Range; // The range associated to a frozen selection to current Bkm creation
    Ce bout code n'est pas accepté (il l'est par chrome (PC et Mobile, Firefox (PC et mobile), IE11 crashed with console message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SCRIPT445: Cet objet ne gère pas cette action
    Fichier : functions.js, ligne : 352, colonne : 1 : curSelection.Range=new Range;
    Le lien "SCRIP445" aboutit à une page 404 !!!

    Je ne comprend vraiment pas pourquoi avec IE (11) il semble impossible de créer un objet ayant la structure du objet du DOM (il n'a pas besoin de protypage), ici un Range, ceci en utilisant une instanciation

    Cette erreur majeure stoppe le script et le rend donc totalement inutilisable ainsi que tout l'application.

    D'autre part cette manière de créer des objets est utilisée de nombreuses fois (l'exemple est le premier cas) dans la suite

    Si vous avez un idée, merci d'avance

    Trebly

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Points : 16
    Points
    16
    Par défaut
    est ce possible de voir le code de ta fonction Range ? tu as bien une fonction Range puisque tu fais "new Range".

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 145
    Points : 63
    Points
    63
    Par défaut Fonction Range : le problème de l'accès direct DOM
    Bonsoir,

    Non je n'ai pas de fonction utilisateur Range.
    J'accède directement au DOM, ce qui marche très bien avec Chrome et Firefox où IE sort une erreur.

    En allant plus loin, on peut estimer possible de passer par "prototype".
    Cependant quand "prototype" permet de modifier un objet du DOM exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var RangeFamily = function () {
     
    this.myRange.prototype = Range.prototype; // Range is here the object Range of the DOM (<a href="https://developer.mozilla.org/fr/docs/Web/API/Range" target="_blank">Mozilla article</a>
    this....
     
    }
    Ceci plante IE11 complètement (écran noir pour "inspecter" crash de driver video, dysfonctionnements -> redémarrage système).
    Alors que les deux formes sont acceptées sans broncher par Chrome et FireFox, elle provoquent un crash IE11 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var RangeFamily = function () { // The constructor
        this.myRange = new Range; // Range reconnu comme un objet connu, ou bien
        ...........
    }
    var theRangeFamily = new RangeFamily;
     
    // ou bien ===============================================
    // générateur d'erreur fatale "exception" avec IE11
     
    var RangeFamily = function () {
        this.myRange = {}; //  un objet indéfini
        ..............
    }
    var theRangeFamily = new RangeFamily;
    theRangeFamily.myRange = new Range;
    La question reste entière :
    quelle syntaxe acceptable par IE pour faire hériter un objet utilisateur du prototype d'un objet du DOM ?

    Je teste dans la foulée : document.createElement('Range') appliqué à l'instance.
    Pour l'instant j'oublie la question : créer un constructeur qui utilise pour un de ses composants le prototype d'un objet du DOM...
    (J'ai le problème, en l'occurence, pour deux objets : une collection de Range et un objet qui est une large extension pour la gestion d'éléments de texte auquel correspond un Range qui en est un des composants - comprenant un objet Range et la référence complète à un Range bati à partir de la sélection courante dans un document HTML)


    Cordialement

    Trebly

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 145
    Points : 63
    Points
    63
    Par défaut Différences Chrome, Firefox et tolérances quand IE11 s'en tient aux strictes spécifications, solution partiell
    Re-bonsoir,

    Bien, ma solution évoquée en dernier lieu : "document.createElement('Range') est la bonne.

    Je ne sais pas encore créer un constructeur correct héritant du prototype d'un objet du DOM mais j'ai pu instancier un Range dans un objet avec createElement avec IE et Safari.

    Chrome et Firefox admettent la syntaxe var x= new Range(); en donnant accès aux objets du DOM comme aux objets utilisateur ce que ne semble pas accepter IE ni d'ailleurs SAFARI (en testant à nouveau IE et SAFARI ils fonctionnent avec mon script sans broncher et gèrent de plus l'évènement "selectionrange" -onselectionrange property- pour JQ, quand Firefox reste le seul à ne pas le gérer).

    Chrome et Firefox admettent aussi dans un constructeur d'écrire "this.myRange = new Range(); ce qui copie le prototype de Range dans myRange. Cette syntaxe n'est pas acceptée par IE ni Safari.

    Il en est de même pour le constructeur avec this.myRange.prototype= Range.prototype.

    J'ai testé Chrome sur mobile, j'enchaîne avec FireFox et Safari.

    Les déboggeurs ne sont pas du même niveau ce qui ajoute de la difficulté et du temps (par exemple la perte des espions avec FireBug lorsque l'on actualise).

    Je n'ai rien trouvé de clair sur ce sujet sur le Net, malgré les nombreuses variantes de syntaxes que l'on peut trouver, accompagnées d'explications qui ne sont pas convaincantes.

    Merci, d'avance de vos suggestions et formulations afin d’éclairer le sujet.

    Cordialement

    Trebly

Discussions similaires

  1. Ce code produit une erreur que je ne comprend pas
    Par Andrew_Hobson dans le forum Débuter
    Réponses: 4
    Dernier message: 19/08/2009, 09h20
  2. une erreur que je ne comprend pas
    Par shyx21 dans le forum C#
    Réponses: 3
    Dernier message: 02/04/2008, 18h25
  3. Une erreur que je ne comprend pas
    Par Macss dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/12/2007, 19h44
  4. [Tableaux] Une erreur que je ne comprend pas
    Par bibom dans le forum Langage
    Réponses: 2
    Dernier message: 01/08/2006, 18h47
  5. [PostGreSQL] une erreur que je ne comprends pas
    Par flo78 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/02/2006, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo