2009-02-19 7 views
2

Je reçois cette erreur maladroite chaque fois que j'essaie de créer une boîte de dialogue Greasemonkey ... Je crois qu'il doit faire avec les limites de XPCNativeWrapper https://developer.mozilla.org/en/XPCNativeWrapper#Limitations_of_XPCNativeWrapper , bien que je Je ne suis pas sûr à 100%. Aucune des méthodes jQuery de base que j'ai utilisées n'a causé d'erreur (append, css, submit, keydown, each, ...).jQuery UI Dialog Throw Erreurs lors de Invoqué Greasemonkey

Il est possible que cela pourrait être une erreur dans Greasemonkey ou en raison de l'interaction entre ui Greasemonkey et jquery, mais je suis vraiment intéressé à trouver comment les amener à travailler ensemble.

// ==UserScript== 
// @name   Dialog Test 
// @namespace  http://strd6.com 
// @description jquery-ui-1.6rc6 Dialog Test 
// @include  * 
// 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js 
// @require  http://strd6.com/stuff/jqui/jquery-ui-personalized-1.6rc6.min.js 

// ==/UserScript== 

$(document).ready(function() { 
$('<div title="Test">SomeText</div>').dialog(); 
}); 

Erreur: [Exception ... "Component est pas disponible" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" emplacement: « frame JS :: fichier: ///home/daniel/.mozilla/ composants de Firefox/greasemonkey.js :: anonyme :: ligne 347" données: no] [Pause sur cette erreur] si (ligne) {

Firefox version: Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv: 1.9.0.6) Gecko/2009020911 Ubuntu/8.04 (hardy) Firefox/3.0.6

Mise à jour: La méthode de mise au point() de la bibliothèque standard jQuery jette également la même erreur:

$('body').focus(); 

Peut-être que l'interface utilisateur appelle la méthode de mise au point à un moment donné?

Toute aide sera grandement appréciée!

Répondre

2

Ce thread est assez ancien mais la façon d'utiliser Greasemonkey avec Jquery pour focus() est d'ajouter un [0] à l'objet jquery pour le retourner à un élément DOM.

 //Example: 
     $('#obj').focus();       //Does not work 
     document.getElementById('obj').focus();  //Works 

     //Hybrid: 
     $(#obj)[0].focus();       //Work around 
1

Voici une solution de contournement, mais il existe encore d'autres problèmes moins dramatiques impliqués.

// ==UserScript== 
// @name   Dialog Test 
// @namespace  http://strd6.com 
// @description jquery-ui-1.6rc6 Dialog Test 
// @include  * 
// 
// @resource  jQuery    http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js 
// @resource  jQueryUI    http://strd6.com/stuff/jqui/jquery-ui-personalized-1.6rc6.min.js 

// ==/UserScript== 

// Inject jQuery into page... gross hack... for now... 
(function() { 
    var head = document.getElementsByTagName('head')[0]; 

    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 

    var jQuery = GM_getResourceText('jQuery'); 
    var jQueryUI = GM_getResourceText('jQueryUI'); 

    script.innerHTML = jQuery + jQueryUI; 
    head.appendChild(script); 

    $ = unsafeWindow.$; 
})(); 

$(document).ready(function() { 
    $('<div title="Test">SomeText</div>').dialog(); 
}); 

Les problèmes ayant découlent maintenant de $ étant dans le contexte unsafeWindow, si certaines méthodes GM ne peuvent pas être appelées à partir du contexte dangereux (comme GM_getValue quand à l'intérieur .each $). Il doit y avoir un moyen d'aller à la racine de ceci et avoir jQueryUI travailler à partir de Greasemonkey. Je suis certain à 90% que c'est un problème XPCNativeWrapper, donc il devrait y avoir une solution de contournement simple en changeant du code dans le plugin de dialogue.

+0

>> certaines méthodes GM ne peuvent pas être appelées dans un contexte non sécurisé << Avez-vous trouvé une solution pour cela? Je suis vraiment intéressé. – eWolf

1

Pas une réponse directe, mais:

Si vous n'êtes pas marié à Greasemonkey, mais veulent une bonne intégration jQuery et la fonctionnalité Greasemonkey comme dans Firefox, vous devriez vérifier Mozilla Ubiquity. Il possède un accès intégré à jQuery, un bon accès à la fenêtre du navigateur, une liberté relative en ce qui concerne le chargement du contenu à partir d'emplacements arbitraires, une option d'exécution sur chaque page (un Greasemonkey), un chargeur de script externe. Je vais essayer de charger jQuery UI ..) et un tas d'autres choses vraiment cool. Je l'ai trouvé beaucoup plus facile à jouer et à courir en quelques minutes au lieu de jouer avec l'étrangeté addon GM/Firefox.