web-dev-qa-db-ja.com

GreasemonkeyでjQueryを使用するにはどうすればよいですか?

私はこの行を入れてみましたが、うまくいきません:

// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js

jQueryはGreasemonkeyではまったく機能しません。 GreasemonkeyでjQueryを使用する他の方法はありますか?

-

同じ問題を抱えているすべての人々のために、ファイルをグリーススポットにアップロードし、そこからインストールする必要があります。

[新しいスクリプトの作成]オプションは機能しません。

227
Keira Nighly

おそらく、Greasemonkeyの最近の十分なバージョンがないでしょう。 @requireを追加したのはバージョン0.8でした。

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

0.8がない場合は、Joan Piedraが ページにscript要素を手動で追加する に説明する手法を使用します。

バージョン0.8と0.9の間では、@requireスクリプトが最初にインストールされたときにのみ処理されます。必要なスクリプトのリストを変更する場合は、スクリプトをアンインストールして再インストールします。 Greasemonkeyはインストール時に必要なスクリプトを一度ダウンロードし、その後キャッシュされたコピーを使用します。

0.9の時点で、Greasemonkeyの動作が変更され( 接線方向に関連する問題 )、編集のたびに必要なスクリプトがロードされるようになりました。スクリプトを再インストールする必要はなくなりました。

183
Rob Kennedy

JQueryが既に含まれているサイトでjQueryを使用する場合は、これが方法です(BrunoLMに触発された)。

var $ = unsafeWindow.jQuery;

これが質問の本来の意図ではないことはわかっていますが、ますます一般的なケースになりつつあり、このケースを明示的に除外しませんでした。 ;)

78

GreasemonkeyスクリプトにjQuery全体を含めても、まったく問題はありません。ソースを取得して、ユーザースクリプトの先頭に配置するだけです。 JavaScriptを既に実行しているので、スクリプトタグを作成する必要はありません!

とにかくユーザーがスクリプトをダウンロードするのは一度だけなので、スクリプトのサイズは大きな問題ではありません。さらに、Greasemonkeyスクリプトを非GM環境(OperaのGM風のユーザースクリプト、SafariのGreasekitなど)で動作させたい場合は、@ requireなどのGM固有の構造を使用しないことが役立ちます。

21
Daniel Lew

Robのソリューションは正しいものです。jQueryライブラリで@requireを使用し、ディレクティブが処理されるようにスクリプトを再インストールしてください。

追加する価値があると思うことの1つは、スクリプトにjQueryを含めたら、通常はjQueryを使用できることです。AJAXメソッドを除く。デフォルトでは、jQueryはGreasemonkeyコンテキストに存在しないXMLHttpRequestを探します。 回避策 GM_xmlhttpRequest(XHRのGreasemonkeyバージョン)のラッパーを作成し、jQueryのajaxSetup()を使用して、ラップバージョンをデフォルトとして指定することについて書きました。これを行うと、通常どおり$.get$.postを使用できます。

JQueryは$.getJSONタグを使用してJSONPをロードするため、jQueryの<script>に問題がある場合もあります。 jQueryはGreasemonkeyウィンドウのスコープでコールバック関数を定義し、ロードされたスクリプトはメインウィンドウのスコープでコールバックを探すため、これはエラーにつながります。最善の方法は、代わりに$.getを使用し、JSON.parse()で結果を解析することです。

7
Ryan

chromeを使用している場合、Chromiumは@requireをサポートしていないため、代替手段を選択する必要があります。

ソース: The Chromium Project-User scripts

Google ChromeのGreasemonkeyスクリプトでjQueryを使用するにはどうすればよいですか? の詳細と代替案

4
Filype

Update:以下のコメントにあるように、この答えは時代遅れです。

他の皆が言ったように、@ requireはスクリプトがインストールされたときにのみ実行されます。ただし、現在、jQuery 1.4。*はグリースモンキーでは動作しないことに注意してください。詳細については、こちらをご覧ください: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

状況が変わるまでjQuery 1.3.2を使用する必要があります。

4
Conley Owens

GreasemonkeyのNew User Scriptを使用して新しいスクリプトを作成できますが、gm_scriptsフォルダー内のconfig.xmlファイルを編集する必要があります。

config.xmlファイルの構文は次のようになります。

<Script filename="jquery_test.user.js" name="jQuery Test" namespace="http://www.example.com/jQueryPlay/" description="Just a test" enabled="true" basedir="jquery_test">
        <Include>http://*</Include>
        <Require filename="jquery.js"/>
</Script>

<Require>タグに注意してください。

スクリプトでは、直接jQuery構文を使用できます。 Greasemonkeyヘッダーにrequireタグがあることを確認してください。 Hello Worldの例を次に示します。

// ==UserScript==
// @name           Test jQuery
// @namespace      http://www.example.com/jQueryPlay/
// @description    Just a test
// @include        http://*
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js
// ==/UserScript==

$(document).ready(function() {  
        alert("Hello world!");
});

config.xmlを変更した後、Greasemonkeyの設定を再度読み込むにはブラウザを再起動する必要があることに注意してください。

また、これを機能させるには、jquery.jsファイルをスクリプトディレクトリフォルダーにコピーする必要があることに注意してください。これをテストしましたが、実際に手動でファイルをコピーした場合にのみ機能します。

ハッピーjQuerying!

3
Auspex

jQueryを使用してWebページ上のイベントのバインドを解除する場合、@ requireメタは機能しません。Webページに含まれるjQueryライブラリを使用し、var $ = unsafeWindow.jQuery;HowでGreasemonkeyで取得する必要があります私はグリースモンキーでjqueryイベントハンドラーのバインドを解除しますか?

2
baptx

JQueryスクリプトを直接インポートすると、Component unavailableを取得する場合があります。

たぶんそれは@Conleyが話していたことです...

使用できます

@require        http://userscripts.org/scripts/source/85365.user.js

これは、Greasemonkeyで動作するように修正されたバージョンであり、jQueryオブジェクトを取得します

var $ = unsafeWindow.jQuery;
$("div").css("display", "none");
1
BrunoLM

@require is NOTは、スクリプトが最初にインストールされたときにのみ処理されます!私の観察では、最初の実行時に処理されます! can Greasemonkeyのコマンドを使用して、新しいスクリプトを作成するスクリプトをインストールします。注意する必要があるのは、@requirepartを追加する前に、ページのリロードがトリガーされないことだけです。 (そして新しいスクリプトを保存...)

0
Dunstkreis