Ошибки вызова диалогового окна jQuery UI при вызове из Greasemonkey - PullRequest
2 голосов
/ 19 февраля 2009

Я получаю эту неловкую ошибку каждый раз, когда пытаюсь создать диалог из Greasemonkey ... Я считаю, что это связано с ограничениями XPCNativeWrapper https://developer.mozilla.org/en/XPCNativeWrapper#Limitations_of_XPCNativeWrapper хотя я не уверен на 100%.

Ни один из основных методов jQuery, которые я использовал, не вызывал ошибок (append, css, submit, keydown, each, ...).

Вполне возможно, что это может быть ошибка в Greasemonkey или из-за взаимодействие между Greasemonkey и JQuery UI, но я действительно интересно выяснить, как заставить их работать вместе.

// ==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();
});

Ошибка: [Исключение ... "Компонент недоступен" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE) "местоположение:" кадр JS :: file: ///home/daniel/.mozilla/firefox/.../components/greasemonkey.js :: аноним :: строка 347 "данные: нет] [Прерывать эту ошибку] ​​if (line) {

Версия Firefox: Mozilla / 5.0 (X11; U; Linux i686; en-US; rv: 1.9.0.6) Gecko / 2009020911 Ubuntu / 8.04 (харди) Firefox / 3.0.6

Обновление: метод focus () из стандартной библиотеки jQuery также выдает ту же ошибку:

$('body').focus();

Может быть, пользовательский интерфейс вызывает метод фокусировки в какой-то момент?

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

2 голосов
/ 06 ноября 2010

Этот поток довольно старый, но способ использовать Greasemonkey с Jquery для focus () - добавить [0] к объекту jquery, чтобы превратить его обратно в элемент DOM.

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

      //Hybrid:
      $(#obj)[0].focus();                         //Work around
1 голос
/ 27 апреля 2009

Не прямой ответ, но:

Если вы не состоите в браке с Greasemonkey, но хотите хорошей интеграции jQuery и функциональности, подобной Greasemonkey, в Firefox, вам следует проверить Mozilla Ubiquity . Он имеет встроенный jQuery, хороший доступ к окну браузера, относительную свободу в отношении загрузки контента из произвольных местоположений, опцию исполнения при каждой загрузке страницы (как Greasemonkey), внешний загрузчик скриптов (так я попробую загрузить jQuery UI ..) и кучу других действительно крутых вещей. Я обнаружил, что намного легче играть и запускаться в течение нескольких минут, а не возиться с аддоном GM / Firefox.

1 голос
/ 20 февраля 2009

Вот один из обходных путей, но есть и другие, менее драматичные проблемы.

// ==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();
});

Проблемы, возникающие сейчас из-за того, что $ находится в контексте unsafeWindow, поэтому определенные методы GM нельзя вызывать из небезопасного контекста (например, GM_getValue, когда он находится внутри $ .each). Должен быть способ добраться до сути и заставить jQueryUI работать из Greasemonkey. Я на 90% уверен, что это проблема XPCNativeWrapper, так что должен быть простой обходной путь, изменив некоторый код в плагине диалога.

...