5

スクリプト ファイルに次の行を追加して@require、Greasemonkey スクリプトの jQuery を実行しています。

// @require https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js

そしてそれは非常にうまく機能します。$('#id')DOM へのアクセスに使用できます。

ただし、$「実際の」ページの変数が変更されています ( $jQuery 1.2.xx はここにあります):$.include定義されていないエラーが発生します。

Greasemonkey のサンドボックス モデルは、ターゲット ページの変数が上書きされるのを防ぐと思いましたか?

JavaScript ライブラリを含めても「実際の」Web サイトには影響せず、自分の Greasemonkey スクリプトだけに影響を与えるようにするにはどうすればよいですか?

4

2 に答える 2

10

Greasemonkey 1.0 は、サンドボックスの動作方法を根本的に変え、何千ものスクリプトを無効にしました。また、Greasemonkey 1.0 の jQuery は、jQuery を使用する Web サイトと競合します

これは大きな問題です。この問題の主なバグ レポートについて、ご意見やご経験をお聞かせいただければ幸いです。

一方、サンドボックスをスクリプトに復元し、メタデータ ブロックを次の行で終了するように$編集して、競合を解決します。

// @grant       GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a major design change introduced in GM 1.0,
    It restores the sandbox.
*/


@grant値 ( 以外) を指定するとnone、サンドボックスが再アクティブ化されます。


過去に優れた機能とパフォーマンスを提供し、この新しいサンドボックスの動作に悩まされていないScriptishへの切り替えを検討することもできます。

于 2012-09-03T23:49:05.593 に答える
3

参照してくださいjQuery.noConflict();。それは多くを説明します。

編集:検索で「Greasemonkey 1.0 + jQuery:壊れており、回避策あり」
が 見つかりました。

考えられる解決策:

 this.$ = this.jQuery = jQuery.noConflict(true);

そうすることで、おそらく暗黙のうちに $, jQuery がスクリプトの名前空間で使用できるようになります。

于 2012-09-03T16:03:12.473 に答える