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

Bibliothèques & Frameworks Discussion :

MooTools 1.3.1 et GreaseMonkey


Sujet :

Bibliothèques & Frameworks

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 35
    Par défaut MooTools 1.3.1 et GreaseMonkey
    Bonjour,

    Je n'arrive pas à trouver les modifications qu'il faut apporter à cette version de MooTools pour l'utiliser avec GreaseMonkey.
    J'ai les erreurs suivantes :
    • Component is not available [... core.js line 5343]
    • Window.fireEvent is not a function [... core.js line 5305]


    Le script que j'ai créé pour tester la nouvelle version de MooTools est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // ==UserScript==
    // @name		testMootools
    //
    // @include		http://*
    // @require		http://.../tools/mt/1.3.1/core.js
    // @require		http://.../tools/mt/1.3.1/more.js 
    // ==/UserScript==
    var test='';
    De ce que j'ai compris, l'objet window est XPCNativeWrapper par GM. De ce fait, MooTools n'arrive pas à lui implémenter d'autres méthodes.

    Les lignes incriminées sont :

    Je mets en PJ dans un zip le script MooTools.core 1.3.1 pour éviter que vous le recherchiez sur le net si vous ne l'avez pas.

    Je ne sais pas si c'est le meilleur endroit pour poster ce message car je pense que mon problème est lié à XPCNativeWrapper et comment le modifier ... En tous cas, je vous remercie pour votre lecture et vos réponses.

    Bonne journée,
    Nuhuruine
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut :(
    Bonjour,

    Je suis navré mais je n'ai pas eu le temps de me pencher sur votre problème et ce n'est pas demain la veille que je pourrai le faire...
    Avez-vous trouvé quelque chose depuis ?

  3. #3
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 35
    Par défaut
    Bonjour,

    aucun problème, je cherche toujours en parallèle
    J'ai une piste mais il faut du temps pour que je l'approfondisse
    Je verrais dans le courant de cette semaine et je vous tiens au courant !

    Bonne journée,
    Nuhuruine.

  4. #4
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 35
    Par défaut
    Bonjour,

    J’ai donc fais quelques tests et j’ai continué à décrypter les sites anglais :p
    Commençons par la première erreur :
    Un objet qui est XPCNativeWrapper, ne peut être parcourue par la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     // Prenons l’objet ObjetWrapper qui est un NPCNativeWrapper
    for (var key in ObjetWrapper) {
    	// traitement
    }
    J’ai trouvé sur le wiki de GM et sur le MDC de FF le code suivant pour parcourir ObjetWrapper :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for each(var value in ObjetWrapper ){
    	unsafeWindow.console.log(value) ;
    }
    Cependant, cela ne me permet de pas de faire un fix pour cette erreur. J’ai poussé un peu mes recherches et j’ai utilisé une fonction MooTools Object.keys qui renvoie un tableau contenant toutes les clefs. Sauf que le résultat est :
    ["window", "uid", "$constructor", "$family", "html", "head", "newElement", "newTextNode", "getDocument", "getWindow", "id", "getElements", "getElement", "contains", "addListener", "removeListener", "retrieve", "store", "eliminate", "addEvent", "removeEvent", "addEvents", "removeEvents", "fireEvent", "cloneEvents", "getSize", "getScroll", "getScrollSize", "getPosition", "getCoordinates", "getHeight", "getWidth", "getScrollTop", "getScrollLeft", "getScrollHeight", "getScrollWidth", "getTop", "getLeft"]
    J’ai l’impression qu’il en manqué …
    J’ai réglé la question en supprimant la ligne est les deux suivantes et j’ai mis poll() ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     //if ('onreadystatechange' in document) document.addListener('readystatechange', check);
    //else shouldPoll = true;
     
    //if (shouldPoll) poll();
    poll();
    Je n’ai plus l’erreur. Par contre, je n’arrive pas à voir la nuance entre poll et document.addListener('readystatechange', check);
    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
     
    var checks = [];
    var check = function(){
    	for (var i = checks.length; i--;) if (checks[i]()){
    		domready();
    		return true;
    	}
     
    	return false;
    };
     
    var poll = function(){
    	clearTimeout(timer);
    	if (!check()) timer = setTimeout(poll, 10);
    };
     
    document.addListener('DOMContentLoaded', domready);
     
    // doScroll technique by Diego Perini http://javascript.nwbox.com/IEContentLoaded/
    var testElement = document.createElement('div');
    if (testElement.doScroll && !isFramed){
    	checks.push(function(){
    		try {
    			testElement.doScroll();
    			return true;
    		} catch (e){}
     
    		return false;
    	});
    	shouldPoll = true;
    }
     
    if (document.readyState) checks.push(function(){
    	var state = document.readyState;
    	return (state == 'loaded' || state == 'complete');
    });
    Bien maintenant passons à la deuxième erreur :
    MooTools.core utilise les fonctions anonymes pour les différentes parties qu’il modifie. Les appels pour la quasi-totalité sont (function(){}).call(this) ;
    J’ai tracé avec la console pour savoir si les méthodes étaient bien implantés au fur et à mesure. Il en ressort que addEvent et fireEvent sont bien sur l’objet this.
    La fonction qui s’occupe du DOMReady se fait appeler : (function(){}).call(window,document) ;

    Pourquoi ? Je ne sais pas. Par contre en replaçant window par this et document par this.document, je n’ai plus d’erreur.

    Quel est l’impact de cette modification ? Actuellement je n’en sais rien. Si quelqu’un sait pourquoi …

    Je laisse ouvert le sujet car je n’ai pas encore vu l’impact sur les fonctions MooTools.

    Je vous tiendrais informé de mon avancement. Seulement, c’est dans un ou deux mois vu le temps que je vais pouvoir y consacrer. N’hésitez pas à apporter votre contribution

    Bonne journée,
    Nuhuruine

Discussions similaires

  1. [MooTools] [greasemonkey] this.getWindow() is undefined
    Par nuhuruine dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 18/03/2010, 13h02
  2. [MooTools] Menu accordeon
    Par keub51 dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 23/05/2007, 16h56
  3. [MooTools] Récuperation de titre avec une librairie ajax
    Par nemo666 dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 23/04/2007, 20h16
  4. [MooTools] Execution du javascript avec mootools
    Par alas70 dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 13/03/2007, 11h36

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