Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Greasemonkey + Jquery?
Forum PHP.pl > Forum > Przedszkole
ShadowD
Mam pytanie, czy może ktoś zna sposób w jaki mógł bym korzystać z Jquery w grasemonkey?

Znalazłem coś takiego:
  1. // Add jQuery
  2. var GM_JQ = document.createElement('script');
  3. GM_JQ.src = 'http://jquery.com/src/jquery-latest.js';
  4. GM_JQ.type = 'text/javascript';
  5. document.getElementsByTagName('head')[0].appendChild(GM_JQ);
  6.  
  7. // Check if jQuery's loaded
  8. function GM_wait() {
  9. if(typeof unsafeWindow.jQuery == 'undefined') { window.setTimeout(GM_wait,100); }
  10. else { $ = unsafeWindow.jQuery; letsJQuery(); }
  11. }
  12. GM_wait();
  13.  
  14. // All your GM code must be inside this function
  15. function letsJQuery() {
  16. alert($); // check if the dollar (jquery) function works
  17.  
  18. }


TYlko nie wiem czemu cały czas wyskakuje alert o zmiennej treści jak by z częściami jakiejś funkcji...
webdice
Wklej źródło jQuery do pliku z Twoim skryptem.
zegarek84
Cytat(webdice @ 22.11.2009, 16:34:27 ) *
Wklej źródło jQuery do pliku z Twoim skryptem.
bez przesady winksmiley.jpg
http://wiki.greasespot.net/Metadata_block#.40require
ShadowD
O nie zauważyłem odpowiedzi, faktycznie o wiele wygodniej będzie korzystać z osobnego pliku jquery.

Mam kod:
  1. // ==UserScript==
  2. // @name Hello jQuery
  3. // @namespace <a href="http://www.example.com/examples" target="_blank">http://www.example.com/examples</a>
  4. // @description jQuery test script
  5. // @include *
  6. // @require <a href="http://code.jquery.com/jquery-latest.js" target="_blank">http://code.jquery.com/jquery-latest.js</a>
  7. // ==/UserScript==
  8.  
  9. $(document).ready(function() {
  10. $("a").click(function() {
  11. alert('Hello world!');
  12. });
  13. });


Nie działa, nie mam pojęcia dlaczego...
zegarek84
wszystko ładnie pięknie tylko źle używasz // @require - w linku który podałem może był mało dokładny przykład bo z adresem względnym (jednak akurat to właściwe miejsce gdyż tam był opis tej matadaty) - jednak już wiedziałeś co i jak to wystarczyło luknąć albo w manual greseamonkey albo do skryptów na useurscripts albo w google...
tutaj masz na wiki greseamonkey przykład załączania i jquery i biblioteki yahoo:
jQuery in Greasemonkey scripts using the metadata key @require
ShadowD
Dostałem od Ciebie linka, za co jestem wdzięczny. Przeglądając dokumentację z pierwszego linka znalazłem:


jQuery require
// ==UserScript==
// @name Hello jQuery
// @namespace http://www.example.com/examples
// @description jQuery test script
// @include *
// @require http://code.jquery.com/jquery-latest.js
// ==/UserScript==

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

To chyba powinno działać, ale nie stety nie działa...

Zaraz popatrzę jeszcze w ostatnim linku, ale z tego co pobieżnie się zorientowałem to powinno działać.
zegarek84
Cytat(Metadata_Block_@require)
This metadata block key property may be used to cache a local or remote script into the current user script at installation time. Greasemonkey will not redownload these external dependencies every time the script is executed on a web page specified by @include

pogróbiłem najważniejszy fragment - nie mam czasu testować wszystkich przypadków i popełnianych przez Was błędów - ale podejrzewam, że ten skrypt Ty już miałeś zainstalowany i tylko zmodyfikowałeś źródła licząc, że biblioteka sama się doinstaluje - patrz wyżej cytat z manuala winksmiley.jpg

pisałem już kilka skryptów pod greseamonkey i to działa winksmiley.jpg
ShadowD
Rozumiem że chodzi o cache...

A więc, klikam na nowy skrypt, wybieram strony na jakich ma być uruchomiony (*) i klikam OK.
Edycja pliku i dodaje require i krótki wręcz banalny kod, a oto rezultat:

[HTML] pobierz, plaintext
  1. // ==UserScript==
  2. // @name test
  3. // @namespace D:\Firefox\gm\qwdad.js
  4. // @include *
  5. // @require <a href="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" target="_blank">http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js</a>
  6. // ==/UserScript==
  7. {:content:}#x28;document).ready(function()
  8. {
  9. alert('Hello world!');
  10. });
[HTML] pobierz, plaintext

Nie działa, pisząc samego alerta, bez redy() działa, wniosek ->> jquery nie działa...

Bogatszy o nowe doświadczenia próbuję z wersją lokalną. Najpierw wklejam pliki w katalog gm w katalogu ff i dla pewności, a raczej szczerze wiedzę, że powinienem go wkleić do katalogu coś jak: ~Firefox\Profiles\...\gm_scripts\ gdzie również wendruje kopia plików. Konfiguracja od początku (takla sama) plus zmiana w require na nazwę pliku, próbowałem /nazwa.roz jak i bez /.

Wynik jak zwykle. Próba poszukania czegoś w sieci (raz kolejny), znalazłem masę plików niby działających kopiowałem je i sprawdzałem wszystko kończyło się tak jak zawsze. ;\

Nie wiem co robię nie tak, jak zauważyłeś lub i nie staram się jakoś rozwiązać ten problem jednak mi nie idzie, prosił bym o kolejną naprowadzenie na właściwą drogę... ;]

EDIT:
Da się doładować 2 pliki do jednego skryptu?
zegarek84
Cytat(ShadowD @ 6.12.2009, 20:33:22 ) *
Rozumiem że chodzi o cache...
nie zupełnie o cache - odinstaluj wszystkie skrypty tego typu - kliknij "usuń" - wyłącz potem mozille i włącz....

Cytat(ShadowD @ 6.12.2009, 20:33:22 ) *
A więc, klikam na nowy skrypt, wybieram strony na jakich ma być uruchomiony (*) i klikam OK.
Edycja pliku i dodaje require i krótki wręcz banalny kod...


właśnie o tym w jednym z postów pisałem, że zapewne tak robisz - a jak pisze przy require w manualu dodatkowy skrypt instaluje się/ściąga się tylko raz przy instalacji skryptu

nie wiem na ile znasz angielski na dokumentacje (nie wiem czemu ale takie teksty i jak ktoś mówi to rozumiem dosyć dobrze - dużo gożej jakbym ja miał mówić - prawie ni w zącool.gif - ale w manualu o namespace też trochu inaczej pisze - podaje się adres internetowy tego skryptu czy to localhst - nie wiem czy można tak jak u Ciebie w kodzie ;p...


najlepiej zrób tak - tak jak pisałem odinstaluj te skrypty co tam masz niepotrzebne i o podobnych próbach (mogą wchodzić w konflikty)... zapisz na dysku plik o takiej nazwie JAKAS_NAZWA.user.js a jego zawartość to w zasadzie kod z Twojego pierwszego postu (narazie z cytatu ;p):

Kod
// ==UserScript==
// @name          jQueryPlay
// @namespace     http://www.example.com/jQueryPlay/
// @description   Plays around with jQuery. Simply appends " more text." to string in the element with id sometext.
// @include       http://forum.php.pl*
// @require       http://code.jquery.com/jquery-latest.min.js
// ==/UserScript==

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



włącz mozille i włącz greseamonkey - zminimalizuj mozille i nie myśl przez chwilę winksmiley.jpg

idź do katalogu z plikiem i kliknij prawym myszki na tym skrypcie-> otwórz za pomocą i wybierz mozille - teraz zainstalujesz...

wejdź na forum.php.pl i klikaj jakikolwiek link - zanim przejdziesz na inną stronę powinno być to co chciałeś winksmiley.jpg




a teraz mała jeszcze uwaga co do Twojego kodu:

// @include * - nie wiem czy to działa na wszystkich stronach - już dłuższy czas nie musiałem pisać skryptów dla siebie a jak pisałem to pod konkretne strony - potem poeksperymentujesz jak już będzie powyższe działało ;p

// @name - co do tego nie wiem czy mogą być spacje w nazwie jak Ty podałeś ;p

gdy potrzebowałem pisać userscript to większość pisałem pod operę i jakbyś czasem chciał tam pisać to drobne uwagi - jeśli rozszerzenie jak w greseamonkey to skrypt wykona się po załadowaniu dom'u, jeśli rozszerzenie tylko js to skrypt jest aktywny od początku wczytywania (zanim jeszcze się dom wczyta) - i tu już sam musisz zdarzeniami operować

jeszcze apropo mozilli - tam skrypty od funkcji na stronie bodajrze mocno są oddzielono - ale jeśli chcesz je wywoływać to poczytaj tip'y w manualu żeby nie korzystać z unsafe.Window (jakoś tak się pisze ;p)

w operze skrypty są mniej oddzielone od obiektu window (wielu stwierdzi że za mało) ale wystarczy pisać tylko anonimowe obiekty gdzie da się zawrzeć także anonimowe funkcje posiadające jednak wewnętrzne nazwy - jeśli potrzebowałem załączyć jakąś mniejszą bibliotekę (tak mniejszą gdyż jakoś nie kożystam z tak dużych bibliotek - co najwyżej czasami przeglądam źródła ;p) to w operze można załączyć przez dom (akurat niedawno tu na forum był temat o załączaniu prototype przez dom)...

Cytat
Da się doładować 2 pliki do jednego skryptu?


z tego co pamiętam to da się winksmiley.jpg - a z tego co sprawdziłem to sporo pamiętam jeszcze winksmiley.jpg
ShadowD
Mocno łopatologicznie to wytłumaczyłeś - dzięki. ;]

Ogólnie, myślałem że 'instalowanie' jest równoznaczne z klikiem [nowy skrypt] a tu się okazuje co innego (jak dodatki do ff).

Co do oddzielenie mojego kodu(userjs) od strony jestem świadom, używam tego typu kodu np do usunięcia ostatnio dodanego efektu google (pojawiania się części strony po ruchu myszą) czy też jakieś drobne dodatki do strony.

Ogólnie wszystko działa, jeszcze kilka testów jak jedne pliki wpływają na drugie, ale to już w własnym zakresie.

Jeszcze raz dzięki za pomoc i setny 'pomógł' leci do Ciebie!! winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.