[ Pobierz całość w formacie PDF ]
.Gdyby poni¿szy zapis umieœciæ w webowej stronie HTML, wtedy poklikniêciu takiego ³¹cza uzyskalibyœmy taki sam komunikat:Uruchom skryptJednak w obydwu przedstawionych przyk³adach nie bêdziemy mieæ do czynienia zbookmarkletami, dopóki URL nie zostanie zapisany w przegl¹darce jako zak³adka.Konkretny sposób zale¿y oczywiœcie od przegl¹darki.W wiêkszoœci przegl¹darekwystarczy klikn¹æ hiPerlacze prawym przyciskiem myszy i wybraæ poleceniedopisania ³¹cza do zak³adek.Tym samym skrypt stanie siê bookmarkletem, którymo¿na uruchomiæ wybieraj¹c go z listy zak³adek.Przypatrzmy siê bardziej skomplikowanemu przyk³adowi.Do tej pory ju¿kilkakrotnie odwo³ywaliœmy siê do dokumentów RFC.Utwórzmy bookmarklet, któryumo¿liwi nam odszukanie okreœlonego RFC.Pos³u¿ymy siê adresemhtty:llvm.faqs.org/rfc/ jako wskazaniem magazynu RFC.Oto jak móg³by wygl¹daæodpowiedni kod w JavaScripcie:rfcNum = prompt( "Numer RFC: ", "" );if ( rfcNum == parselnt( rfcNum ) )open( "http://www.faqs.org/rfc/rfc" + rfcNum + '.txt" )else if ( rfcNum )alert( "Niepoprawny numer." );Zwracamy siê do u¿ytkownika o podanie numeru RFC.Jeœli u¿ytkownik wprowadziliczbê ca³kowit¹, to utworzymy nowe okno przegl¹darki, do którego pobierzemyodpowiedni dokument RFC.Zauwa¿my, ¿e nie jest tu brana pod uwagê sytuacja, wktórej RFC o danym numerze nie istnieje - serwer Web www.faqs.org zg³osiu¿ytkownikowi b³¹d o kodzie 404.Jeœli jednak wprowadzona wartoœæ nie bêdzieliczb¹ ca³kowit¹, fakt ten zasygnalizuje u¿ytkownikowi nasz kod.Jeœliu¿ytkownik nic nie wpisze lub kliknie przycisk Anuluj, nie podejmiemy ¿adnychdzia³añ.Teraz przekszta³æmy ten kod w bookmarklet.Najpierw musimy siê upewniæ, ¿e naszkod nie zwraca ¿adnych wartoœci.Jeœli kod bookmarkletu zwraca³by wartoœæ,niektóre przegl¹darki (miêdzy innymi Netscape) zast¹pi³yby bie¿¹c¹ stronêzwrócon¹ wartoœci¹.U¿ytkownicy mogliby byæ zdezorientowani, gdyby po ka¿dymu¿yciu bookmarkletu otrzymywali na przyk³ad pust¹ stronê z napisem [null] wlewym górnym rogu.Naj³atwiej temu zapobiec, pos³uguj¹c siê funkcj¹ void.Nieprzekazuje siê do niej ¿adnych argumentów, a ona niczego nie zwraca.Funkcjêvoid wstawimy tu¿ po ostatniej instrukcji zwracaj¹cej wartoœæ albo po prostudo³¹czymy j¹ na samym koñcu.Skorzystamy z drugiej mo¿liwoœci, poniewa¿ womawianym skrypcie s¹ a¿ trzy instrukcje, które mog¹ byæ wykonane jakoostatnie, w zale¿noœci od tego, co zrobi u¿ytkownik.Na koñcu skryptudopisujemy wiêc nastêpuj¹cy wiersz:void( 0 ) ;Teraz powinniœmy usun¹æ lub zakodowaæ wszelkie znaki niedozwolone w URL-u,czyli miêdzy innymi bia³e znaki, a tak¿e nastêpuj¹ce [9 Niedozwolone s¹ równie¿znaki steruj¹ce oraz znaki spoza zbioru ASCII, lecz te tak czy inaczej musz¹byæ odpowiednio zamaskowane w samym JavaScripcie.Ponadto mo¿na zauwa¿yæ, ¿eprzedstawiona tu lista ró¿ni siê od podanej w rozdziale 2 w czêœci „Kodowanie wURL-ach".Tamta lista odnosi siê do URL-i protoko³u HTTP, wiêc obejmuje znaki oszczególnym znaczeniu w tym protokole.URL-e Java-Scripru s¹ inne ni¿ URL-eHTTP, wiêc podana tu lista obejmuje tylko te znaki, które s¹ niedozwolone wewszystkich URL-ach.]: , #,%,", {, }, I,\,^, [,]/.Niemniej jednak Netscape Communicator 4.x nierozpozna zakodowanych elementów sk³adniowych (na przyk³ad nawiasów) w URL-achjavascriptowych.Chocia¿ oznacza to, ¿e bookmarklety zawieraj¹ce te znaki s¹nieprawid³owymi URL-ami, musimy je pozostawiæ w postaci niezakodowanej, jeœlichcemy, aby bookmarklety dzia³a³y w przegl¹darkach Netscape'a.Inneprzegl¹darki akceptuj¹ te znaki jako zakodowane lub niezakodowane.W ka¿dymrazie powinniœmy usun¹æ wszelkie zbêdne bia³e znaki.Na koniec poprzedzamy naszkod napisem javascript: i oto, co otrzymujemy:javascript:rfcNum=prompt( 'Numer%20RFC:', ' ' );if(rfcNura==parse!nt (rfcNum) )open ('http:7/www.faqs.org/rfc/rfc1+rfcNum+'.txt');else if(rfcNum)alert ('Niepoprawny%20numer.' ) ; void (0) ;Podzia³y wierszy nie wystêpuj¹ w URL-u, lecz tu je wprowadziliœmy, gdy¿pojedynczy wiersz nie mieœci³ siê na stronie.Pracuj¹c nad bookmarkletami nale¿y jeszcze pamiêtaæ o jednym: bookmarkletywykonywane s¹ w tym samym zasiêgu danych co g³Ã³wna strona wyœwietlana wprzegl¹darce u¿ytkownika.Ma to pewne zalety, poznamy je w nastêpnympodrozdziale, „Bookmarklety i CGI".Wad¹ tego rozwi¹zania jest to, ¿e nale¿yuwa¿aæ, aby tworzony przez nas kod nie wchodzi³ w konflikt z kodem, któryzaszyty jest w bie¿¹cej stronie.Powinno siê uwa¿aæ zw³aszcza na nazwyzmiennych i tworzyæ takie nazwy, których prawdopodobieñstwo u¿ycia w innychserwisach Web jest znikome.W JavaScripcie uwzglêdniana jest wielkoœæ liter,wiêc rozs¹dne wydaje siê stosowanie nietypowych kombinacji wielkich i ma³ychliter.W naszym ostatnim przyk³adzie zapewne lepsz¹ (choæ mniej czyteln¹)nazw¹ zmiennej by³oby rFcNuM.ZgodnoœæPoniewa¿ w bookmarkletach u¿ywany jest JavaScript, nie ze wszystkimiprzegl¹darkami Web s¹ one zgodne.Niektóre przegl¹darki, na przyk³ad MicrosoftInternet Explorer 3.0, mimo ¿e obs³uguj¹ JavaScript, nie obs³uguj¹bookmarkletów.U innych z kolei obs³uga ta nie jest pe³na
[ Pobierz całość w formacie PDF ]