Bagaimana saya bisa menggunakan jQuery di Greasemonkey?

234

Saya mencoba meletakkan garis ini tetapi tidak berhasil:

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

jQuery sama sekali tidak bekerja di Greasemonkey. Apakah ada cara lain untuk menggunakan jQuery di Greasemonkey?

-

Untuk semua orang yang memiliki masalah yang sama, Anda harus mengunggah file ke greasespot kemudian menginstalnya dari sana.

Opsi Buat Skrip Baru tidak akan berfungsi!

Keira
sumber
14
@ Jorge, apakah Anda tidak tahu bahwa situs Web itu sama sekali tidak memiliki keajaiban di dalamnya? Anda dapat menelusuri apa pun dengan ekstensi file .user.js, dan Greasemonkey akan bertanya apakah Anda ingin menginstalnya. Itu termasuk file di komputer lokal Anda. Menginstal skrip apa pun semudah menyeretnya ke browser Anda.
Rob Kennedy
5
Sepertinya sekarang berfungsi dengan baik bahkan ketika mengedit file setelah instalasi.
Josef Sábl
6
Josef benar - sejak versi 0.9.0 , Greasemonkey sekarang akan menginstal file @required segera setelah file diedit.
Rory O'Kane
1
Juga jangan lupa untuk tetap menggunakan $(document).ready(function() {...});kode Anda
Pengguna
1
Cara termudah untuk menyegarkan Anda @requiresadalah menambahkan hash atau querystring di akhir @requirepernyataan, dan mengubahnya kapan pun perlu diperbarui. Mirip dengan cara Anda akan "cachebust" favicon. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js?v=changeme
Apache

Jawaban:

189

Mungkin Anda tidak memiliki versi Greasemonkey yang cukup baru. Itu versi 0.8 yang ditambahkan @require.

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

Jika Anda tidak memiliki 0,8, gunakan teknik yang dijelaskan Joan Piedra untuk menambahkan scriptelemen secara manual ke halaman .

Antara versi 0.8 dan 0.9, @requireyang hanya diproses ketika script pertama kali diinstal. Jika Anda mengubah daftar skrip yang diperlukan, Anda perlu mencopot skrip Anda dan menginstalnya kembali; Greasemonkey mengunduh skrip yang diperlukan satu kali pada saat instalasi dan menggunakan salinan cache setelahnya.

Pada 0,9, perilaku Greasemonkey telah berubah (ke alamat masalah yang berhubungan secara tangensial ) sehingga sekarang memuat skrip yang diperlukan setelah setiap pengeditan; menginstal ulang skrip tidak lagi diperlukan.

Rob Kennedy
sumber
Rob, Jadi apa yang harus saya lakukan? Saya membuat skrip pengguna saya menggunakan tautan Skrip Pengguna Baru. Saya menambahkan @require dan tidak berhasil. Jadi bagaimana saya bisa membuatnya bekerja? Tolong jelaskan saya ingin metode @require bekerja karena jauh lebih elegan daripada metode elemen skrip
Keira Nighly
1
Ok Jadi saya membuatnya bekerja. Terima kasih!!! Saya mengunggah script di Greasespot dan menginstalnya dari sana.
Keira Nighly
2
Saya membayangkan bahwa ketika Anda membuat skrip baru dari dalam Greasemonkey, skrip diinstal segera. Skrip itu adalah file kosong default, yang berarti Anda telah melewatkan kesempatan Anda untuk memerlukan skrip eksternal.
Rob Kennedy
Jadi tidak ada cara menggunakan @require pada skrip baru yang Anda buat? : /
quano
4
Cukup sederhana, @Quano. Buat file .user.js baru, tulis skrip Anda di dalamnya, lalu seret ke browser Anda untuk menginstalnya. Batasan untuk memerlukan skrip eksternal hanya ada jika Anda membuat skrip dari dalam UI Greasemonkey, tetapi tidak ada persyaratan bahwa Anda harus menggunakan Greasemonkey untuk membuat file skrip. Anda dapat mengedit skrip setelah diinstal, tetapi jika Anda ingin menambahkan @requirearahan baru , Anda harus mencopot dan menginstal ulang skrip agar diberlakukan.
Rob Kennedy
81

Jika Anda ingin menggunakan jQuery di situs yang sudah termasuk, ini adalah caranya (terinspirasi oleh BrunoLM):

var $ = unsafeWindow.jQuery;

Saya tahu ini bukan maksud asli dari pertanyaan, tetapi semakin menjadi kasus umum dan Anda tidak secara eksplisit mengecualikan kasus ini. ;)

Henrik Heimbuerger
sumber
4
Tidak didukung di Chrome rupanya - chromium.org/developers/design-documents/user-scripts
Ashley
Bekerja di Scriptish of Firefox!
Gqqnbig
2
Ingin menguji apakah Anda belum memilikinya seperti ini: if(typeof $ == 'undefined'){ var $ = unsafeWindow.jQuery; } Di Chrome, situs Jquery sudah tersedia.
Jonathon
Hmm. Saya mendapatkan kesalahan yang sangat aneh saat menggunakan ini. Ini alert($('.submit_entry').length);adalah kesalahan keluar, dan sekaligus mengirimkan peringatan yang sesuai.
Jonathon
21

Sama sekali tidak ada yang salah dengan memasukkan keseluruhan jQuery ke dalam skrip Greasemonkey Anda. Ambil saja sumbernya, dan letakkan di bagian atas skrip pengguna Anda. Tidak perlu membuat tag skrip, karena Anda sudah menjalankan JavaScript!

Pengguna hanya mengunduh skrip sekali saja, jadi ukuran skrip bukan masalah besar. Selain itu, jika Anda ingin skrip Greasemonkey Anda berfungsi di lingkungan non-GM (seperti skrip pengguna GM-esque Opera, atau Greasekit di Safari), itu akan membantu untuk tidak menggunakan konstruksi unik GM seperti @require.

Dan Lew
sumber
7

Solusi Rob adalah yang tepat - gunakan @require dengan pustaka jQuery dan pastikan untuk menginstal ulang skrip Anda sehingga arahan akan diproses.

Satu hal yang menurut saya layak untuk ditambahkan adalah bahwa Anda dapat menggunakan jQuery secara normal setelah Anda memasukkannya ke dalam skrip Anda, kecuali untuk metode AJAX . Secara default jQuery mencari XMLHttpRequest, yang tidak ada dalam konteks Greasemonkey. Saya menulis tentang solusi di mana Anda membuat pembungkus untuk GM_xmlhttpRequest (versi Greasemonkey XHR) dan menggunakan jQuery's ajaxSetup()untuk menentukan versi terbungkus Anda sebagai default. Setelah Anda melakukan ini, Anda dapat menggunakan $.getdan$.post seperti biasa.

Anda juga mungkin memiliki masalah dengan jQuery $.getJSONkarena memuat JSONP menggunakan <script>tag. Ini mengarah ke kesalahan karena jQuery mendefinisikan fungsi panggilan balik dalam lingkup jendela Greasemonkey, dan skrip yang dimuat mencari panggilan balik dalam lingkup jendela utama. Taruhan terbaik Anda adalah menggunakan $.getgantinya dan uraikan hasilnya dengan JSON.parse().

Ryan
sumber
4

Anda dapat membuat skrip baru menggunakan Skrip Pengguna Baru di Greasemonkey tetapi Anda harus mengedit file config.xml di dalam folder gm_scripts.

File config.xml Anda harus memiliki sintaksis yang sama dengan ini:

<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>

Perhatikan <Require> tag.

Dalam skrip Anda, Anda dapat menggunakan sintaks jQuery langsung. Pastikan Anda memiliki tag memerlukan di header Greasemonkey. Berikut ini adalah contoh 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!");
});

Ingatlah bahwa setelah memodifikasi config.xml Anda harus me-restart browser Anda untuk Greasemonkey untuk memuat ulang pengaturan lagi.

Perhatikan juga bahwa Anda perlu menyalin file jquery.js ke folder direktori skrip Anda agar ini berfungsi. Saya menguji ini, dan itu hanya berfungsi jika Anda benar-benar menyalin file secara manual di sana.

Selamat jQuerying!

Auspex
sumber
4

Memperbarui : Seperti komentar di bawah ini, jawaban ini sudah usang.

Seperti yang dikatakan semua orang, @require hanya dijalankan ketika skrip telah diinstal. Namun, Anda harus mencatat juga bahwa saat ini jQuery 1.4. * Tidak berfungsi dengan greasemonkey. Anda dapat melihat di sini untuk perincian: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

Anda harus menggunakan jQuery 1.3.2 sampai semuanya berubah.

Conley Owens
sumber
3
Jawaban ini sudah usang pada GM versi 0.9 atau yang lebih baru.
Brock Adams
3
@ Batu: Mengapa? Bisakah Anda jelaskan untuk kami noobs?
Trevor Sullivan
2

meta @require tidak berfungsi saat Anda ingin melepaskan ikatan peristiwa pada halaman web menggunakan jQuery, Anda harus menggunakan pustaka jQuery yang termasuk dalam halaman web dan kemudian mendapatkannya di Greasemonkey dengan var $ = unsafeWindow.jQuery; Bagaimana cara membatalkan ikatan penangan acara jquery di greasemonkey?

baptx
sumber
1

Anda mungkin mendapatkan Component unavailablejika Anda mengimpor skrip jQuery secara langsung.

Mungkin itu yang dibicarakan @Conley ...

Kamu bisa memakai

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

yang merupakan versi modifikasi untuk bekerja pada Greasemonkey, dan kemudian mendapatkan objek jQuery

var $ = unsafeWindow.jQuery;
$("div").css("display", "none");
BrunoLM
sumber
Saya menyadari ini adalah 5 tahun, tetapi hanya bertanya-tanya: bukankah salah untuk mendapatkan objek jQuery seperti itu sudah didefinisikan pada halaman, merujuknya sebagai unsafeWindow.jQuery?
jj_
0

@requireadalah TIDAK hanya diproses ketika script pertama kali diinstal! Pada pengamatan saya itu diproses pada waktu eksekusi pertama! Jadi, Anda dapat menginstal skrip melalui perintah Greasemonkey untuk membuat skrip baru. Satu-satunya hal yang harus Anda perhatikan adalah, bahwa tidak ada halaman yang dimuat kembali dipicu, sebelum Anda menambahkan @requirebagian. (dan simpan skrip baru ...)

Dunstkreis
sumber