2

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 :: anonymous :: line 347" data: no] [このエラーで中断] if (line) {

Firefox バージョン: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.04 (hardy) Firefox/3.0.6

更新: 標準の jQuery ライブラリの focus() メソッドも同じエラーをスローします。

$('body').focus();

たぶん、UI はある時点で focus メソッドを呼び出していますか?

どんな助けでも大歓迎です!

4

3 に答える 3

2

このスレッドはかなり古いものですが、Jquery で Greasemonkey を focus() に使用する方法は、jquery オブジェクトに [0] を追加して、DOM 要素に戻すことです。

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

      //Hybrid:
      $(#obj)[0].focus();                         //Work around
于 2010-11-06T19:23:46.627 に答える
1

直接の答えではありませんが、

Greasemonkey と結婚していないが、Firefox での優れた jQuery 統合と Greasemonkey のような機能が必要な場合は、Mozilla Ubiquityをチェックしてください。jQuery が組み込まれており、ブラウザー ウィンドウへのアクセスが良好で、任意の場所からのコンテンツの読み込みに関して比較的自由度が高く、ページ読み込みごとの実行オプション (Greasemonkey のように)、外部スクリプト ローダー (これが私が行った方法です) を備えています。 jQuery UI を読み込もうとするでしょう..) と他の本当にクールなものの束. GM / Firefoxアドオンの奇妙さをいじるのとは対照的に、プレイして数分以内に実行する方がはるかに簡単であることがわかりました.

于 2009-04-27T03:24:18.783 に答える
1

ここに回避策の 1 つを示しますが、それほど劇的ではない問題が他にも関係しています。

// ==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 メソッドを unsafe コンテキストから呼び出すことができません ($.each 内の GM_getValue など)。この問題の根本にたどり着き、Greasemonkey 内から jQueryUI を動作させる方法が必要です。それが XPCNativeWrapper の問題であることは 90% 確信しているので、ダイアログ プラグインのコードを変更することで簡単な回避策があるはずです。

于 2009-02-20T04:23:03.090 に答える