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


234

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

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

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

-

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

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


14
@ジョージ、そのWebサイトにはまったく魔法がないことをご存知でしたか。ファイル拡張子が.user.jsのすべてのものを参照でき、Greasemonkeyがそれをインストールするかどうかを尋ねてきます。これには、ローカルコンピューター上のファイルが含まれます。スクリプトのインストールは、ブラウザにドラッグするのと同じくらい簡単です。
Rob Kennedy、

5
インストール後にファイルを編集する場合でもうまく機能するようです。
JosefSábl11年

6
Josefは正解です。バージョン0.9.0以降、Greasemonkeyはファイルが編集されるとすぐに@requiredファイルをインストールします。
Rory O'Kane

1
また$(document).ready(function() {...});、コードで引き続き使用することを忘れないでください
User

1
リフレッシュする最も簡単な方法@requiresは、@requireステートメントの最後にハッシュまたはクエリ文字列を追加し、更新が必要なときにいつでも変更することです。ファビコンを「キャッシュバスト」する方法に似ています。 // @require http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js?v=changeme
Apache

回答:


189

おそらく、最近の十分なバージョンのGreasemonkeyがないかもしれません。追加されたのはバージョン0.8 @requireでした。

// @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の動作が変更され(接線に関連する問題に対処するため)、すべての編集後に必要なスクリプトがロードされるようになりました。スクリプトを再インストールする必要はありません。


ロブ、それで私は何をする必要がありますか?[新しいユーザースクリプト]リンクを使用してユーザースクリプトを作成しています。@requireを追加しましたが、機能しませんでした。では、どうすればそれを機能させることができますか?それはscript要素法よりもはるかにエレガントである原因私は仕事に@require方法をしたい教えてください
キーラNighly

1
Okそれで私はそれを働かせました。ありがとう!!! スクリプトをGreasespotにアップロードし、そこからインストールしました。
キーラ・ナイリー、2009年

2
Greasemonkey内から新しいスクリプトを作成すると、スクリプトはすぐにインストールされると思います。そのスクリプトはデフォルトの空のファイルです。つまり、外部スクリプトを要求する機会を逃しました。
ロブ・ケネディ

では、作成中の新しいスクリプトで@requireを使用する方法はありませんか?:/
quano

4
@Quanoはとてもシンプルです。新しい.user.jsファイルを作成し、その中にスクリプトを記述し、それをブラウザーにドラッグしてインストールします。外部スクリプトの要求に関する制限は、GreasemonkeyのUIからスクリプトを作成する場合にのみ存在しますが、Greasemonkeyを使用してスクリプトファイルを作成する必要はありません。インストール後にスクリプトを編集できますが、新しい@requireディレクティブを追加する場合は、スクリプトをアンインストールして再インストールし、スクリプトを有効にする必要があります。
ロブ・ケネディ

81

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

var $ = unsafeWindow.jQuery;

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


4
Chromeではサポートされていないようです-chromium.org/developers/design-documents/user-scripts
Ashley

FirefoxのScriptishで動作します!
Gqqnbig 2013年

2
あなたはそれをまだ持っていないことをテストしたいでしょう:if(typeof $ == 'undefined'){ var $ = unsafeWindow.jQuery; } Chromeでは、Jqueryサイトはすでに利用可能になります。
Jonathon 2013

うーん。これを使用すると本当に奇妙なエラーが出ます。これalert($('.submit_entry').length);は、エラーが発生すると同時に適切なアラートを送信することにもなります。
Jonathon 2013

21

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

ユーザーはスクリプトを1度だけダウンロードするので、スクリプトのサイズは大きな問題ではありません。さらに、GreasemonkeyスクリプトをGM以外の環境(OperaのGM-esqueユーザースクリプトや、Safari上のGreasekitなど)で動作させたい場合は、@ requireなどのGM固有の構成を使用しない方が便利です。


7

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

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

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


4

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!


4

更新:以下のコメントにあるように、この回答は廃止されました。

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

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


3
この回答は、GMバージョン0.9以降では使用されていません。
ブロックアダムス

3
@ブロック:なぜ?初心者に説明してもらえますか?
Trevor Sullivan


2

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


1

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

多分それは@Conleyが話していたものです...

使用できます

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

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

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

私はこれが5歳であることを理解していますが、疑問に思っています。ページで既に定義されているようにjQueryオブジェクトを取得して、unsafeWindow.jQueryとして参照するのは間違っていませんか?
jj_

0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.