Greasemonkey'de jQuery'yi nasıl kullanabilirim?


234

Bu satırı koymayı denedim ama işe yaramıyor:

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

jQuery, Greasemonkey'de hiç çalışmıyor. Greasemonkey'de jQuery kullanmanın başka bir yolu var mı?

-

Aynı sorunu yaşayan herkes için, dosyayı greasespot'a yüklemeniz ve oradan yüklemeniz gerekir.

Yeni Komut Dosyası Oluştur seçeneği çalışmaz!


14
@Jorge, Web sitesinde kesinlikle sihir olmadığını biliyor muydunuz? Bir .user.js uzantılı dosya her şeye göz atabilirsiniz ve Greasemonkey onu yüklemek isteyip istemediğinizi soracaktır. Bu, yerel bilgisayarınızdaki dosyaları içerir. Herhangi bir komut dosyasını yüklemek, tarayıcınıza sürüklemek kadar basittir.
Rob Kennedy

5
Kurulumdan sonra dosyayı düzenlerken bile iyi çalışıyor gibi görünüyor.
Josef Sábl

6
Josef haklı - 0.9.0 sürümünden beri , Greasemonkey artık dosya düzenlenir edilmez @ gerekli dosyaları yükleyecek.
Rory O'Kane

1
Ayrıca hala $(document).ready(function() {...});kodunuzda kullanmayı unutmayın
User

1
Sizi yenilemenin en kolay yolu @requires, @requireifadenin sonuna bir karma veya sorgu dizesi eklemek ve güncellenmesi gerektiğinde bunu değiştirmektir. Favicon'u "önbelleğe alma" yönteminize benzer. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js?v=changeme
Apache

Yanıtlar:


189

Belki de Greasemonkey'in yeterince yeni bir sürümüne sahip değilsiniz. Bu sürüm 0.8 idi @require.

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

0,8'iniz yoksa , sayfaya manuel olarak bir scriptöğe eklemek için Joan Piedra'nın açıkladığı tekniği kullanın .

Sürüm 0.8 ve 0.9 arasında @require, yalnızca komut dosyası ilk yüklendiğinde işlenir. Gerekli komut dosyalarının listesini değiştirirseniz, komut dosyanızı kaldırmanız ve yeniden yüklemeniz gerekir; Greasemonkey gerekli komut dosyasını kurulumda bir kez indirir ve daha sonra önbelleğe alınmış bir kopya kullanır.

0.9'dan itibaren, Greasemonkey davranışı değişti ( teğetsel olarak ilgili bir sorunu gidermek için ), artık her düzenlemeden sonra gerekli komut dosyalarını yükleyecek; betiğin yeniden yüklenmesi artık gerekli değildir.


Rob, Peki ne yapmam gerekiyor? Kullanıcı komut dosyalarımı Yeni Kullanıcı Komut Dosyası bağlantısını kullanarak oluşturuyorum. @ İsteğini ekledim ve işe yaramadı. Peki nasıl çalıştırabilirim? Lütfen @require yönteminin çalışmasını istiyorum, çünkü kod öğesi yönteminden çok daha zarif
Keira Nighly

1
Tamam Bu yüzden işe yaradı. Teşekkürler!!! Komut dosyasını Greasespot'a yükledim ve oradan yükledim.
Keira Nighly

2
Greasemonkey içinden yeni bir komut dosyası oluşturduğunuzda komut dosyasının hemen yüklendiğini hayal ediyorum. Bu komut dosyası varsayılan boş dosyadır, yani harici komut dosyaları isteme şansınızı kaçırmışsınız demektir.
Rob Kennedy

Yani @require'ı yeni bir senaryoda kullanmanın bir yolu yok mu? : /
quano

4
Oldukça basit, @Quano. Yeni bir .user.js dosyası oluşturun, komut dosyanızı yazın ve yüklemek için tarayıcınıza sürükleyin. Eğer dış komut dosyalarını gerektiren üzerinde sınırlama sadece mevcut oluşturmak Greasemonkey en arayüzünden senaryo, ancak komut dosyası oluşturmak için Greasemonkey'yi kullanması gerektiğini bir gereksinim yoktur. Komut dosyası yüklendikten sonra düzenleyebilirsiniz, ancak yeni @requireyönergeler eklemek istiyorsanız , komut dosyasının yürürlüğe girmesi için kaldırmanız ve yeniden yüklemeniz gerekir.
Rob Kennedy

81

JQuery'yi zaten dahil olduğu bir sitede kullanmak istiyorsanız, bu yol (BrunoLM'den esinlenerek) gitmenin yoludur:

var $ = unsafeWindow.jQuery;

Bunun sorunun asıl amacı olmadığını biliyorum, ama giderek yaygınlaşan bir dava haline geliyor ve bu davayı açıkça dışlamadınız. ;)


4
Görünüşe göre Chrome'da desteklenmiyor - chromium.org/developers/design-documents/user-scripts
Ashley

Firefox Scriptish ile çalışıyor!
Gqqnbig

2
Zaten buna sahip olmadığınızı test etmek isteyecek: if(typeof $ == 'undefined'){ var $ = unsafeWindow.jQuery; } Chrome'da, bir Jquery sitesi zaten mevcut olacak.
Jonathon

Hmm. Bunu kullanırken gerçekten garip bir hata alıyorum. Bu alert($('.submit_entry').length);hem hata veriyor hem de uygun uyarıyı aynı anda gönderiyor.
Jonathon

21

Greasemonkey betiğinize jQuery'nin tamamını dahil etmede kesinlikle hiçbir yanlışlık yoktur. Kaynağı alın ve kullanıcı komut dosyanızın en üstüne yerleştirin. Zaten JavaScript çalıştırdığınız için komut dosyası etiketi oluşturmanıza gerek yok!

Kullanıcı komut dosyasını yalnızca bir kez indirir, bu nedenle komut dosyasının boyutu büyük bir endişe kaynağı değildir. Ayrıca, Greasemonkey komut dosyanızın GM olmayan ortamlarda (Opera'nın GM'ye özgü kullanıcı komut dosyaları veya Safari'deki Greasekit gibi) çalışmasını istiyorsanız, @require gibi GM'ye özgü yapıların kullanılmamasına yardımcı olur.


7

Rob'un çözümü doğru olanıdır - @requirejQuery kitaplığıyla kullanın ve direktifin işlenmesi için komut dosyanızı yeniden yüklediğinizden emin olun.

Eklemeye değer olduğunu düşündüğüm bir şey, AJAX yöntemleri hariç , betiğinize dahil ettikten sonra normalde jQuery kullanabilmenizdir . Varsayılan olarak jQuery, Greasemonkey bağlamında bulunmayan XMLHttpRequest öğesini arar. GM_xmlhttpRequest (XHR'nin Greasemonkey sürümü) için bir sarıcı oluşturduğunuz ve sarılmış sürümünüzü varsayılan olarak belirtmek için jQuery'yi kullandığınız bir geçici çözüm hakkında yazdım ajaxSetup(). Bunu yaptıktan sonra $.getve $.posther zamanki gibi kullanabilirsiniz .

Etiketleri $.getJSONkullanarak JSONP yüklediği için jQuery's ile de sorun yaşayabilirsiniz <script>. JQuery, Greasemonkey penceresi kapsamında geri arama işlevini tanımladığı ve yüklenen komut dosyaları, ana pencere kapsamında geri aramayı aradığı için bu hatalara neden olur. En iyi seçeneğiniz $.getbunun yerine kullanmak ve sonucu ayrıştırmaktır JSON.parse().


4

Greasemonkey'deki Yeni Kullanıcı Komut Dosyasını kullanarak yeni bir komut dosyası oluşturabilirsiniz, ancak gm_scripts klasörü içindeki config.xml dosyasını düzenlemeniz gerekir.

Sizin Config.xml dosyası bu benzer bir sözdizimi sahip olmalıdır:

<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>Etikete dikkat edin .

Senaryonuzda doğrudan jQuery sözdizimini kullanabilirsiniz. Greasemonkey başlığında gerekli etikete sahip olduğunuzdan emin olun. Merhaba Dünya örneği:

// ==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 dosyasını değiştirdikten sonra , Greasemonkey'in ayarları yeniden yüklemesi için tarayıcınızı yeniden başlatmanız gerektiğini unutmayın.

Ayrıca, çalışması için jquery.js dosyasını komut dosyası dizini klasörünüze kopyalamanız gerektiğini unutmayın. Bunu test ettim ve sadece dosyayı manuel olarak oraya kopyalarsanız çalışır.

Mutlu jQuerying!


4

Güncelleme : Aşağıdaki yorumun söylediği gibi, bu cevap kullanılmıyor.

Herkesin söylediği gibi, @ istek yalnızca komut dosyası yüklendiğinde çalıştırılır. Ancak, şu anda jQuery 1.4. * 'Un greasemonkey ile çalışmadığını da unutmayın. Ayrıntılar için buraya bakabilirsiniz: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

İşler değişene kadar jQuery 1.3.2'yi kullanmanız gerekecek.


3
Bu yanıt GM 0.9 veya daha sonraki bir sürümünden itibaren geçersizdir.
Brock Adams

3
@Brock: Neden? Bize açıklar mısın?
Trevor Sullivan



1

Component unavailableJQuery betiğini doğrudan içe aktarırsanız alabilirsiniz .

Belki @Conley'den bahsediyordu ...

Kullanabilirsiniz

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

Greasemonkey üzerinde çalışmak için değiştirilmiş bir sürümdür ve jQuery nesnesini alır

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

Bunun 5 yaşında olduğunu fark ettim, ama sadece merak ediyorum: jQuery nesnesini zaten sayfada tanımlanmış gibi, unsafeWindow.jQuery olarak adlandırmak yanlış değil mi?
jj_

0

@requireolduğu DEĞİL komut ilk kurulduğunda sadece işlenmiş! Gözlemlerimde ilk uygulama zamanında işleniyor! Yani yapabilirsiniz yepyeni senaryoyu oluşturmak için Greasemonkey emriyle yoluyla komut dosyası yüklemek. Dikkat etmeniz gereken tek şey, @requireparçayı eklemenizden önce sayfa yeniden yükleme tetiklenmediğidir . (ve yeni komut dosyasını kaydedin ...)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.