Przenoszenie JavaScriptu ze strony internetowej
Znajdowanie zawartości skryptu do przeniesienia
Getty Images/ermgut
Kiedy po raz pierwszy piszesz nowy JavaScript, najłatwiejszym sposobem na jego skonfigurowanie jest osadzenie kodu JavaScript bezpośrednio na stronie internetowej, aby wszystko było w jednym miejscu podczas testowania go, aby działał poprawnie. Podobnie, jeśli wstawiasz wstępnie napisany skrypt do swojej witryny, instrukcje mogą informować o osadzeniu części lub całości skryptu na samej stronie internetowej.
Jest to w porządku, jeśli chcesz najpierw skonfigurować stronę i sprawić, by działała poprawnie, ale gdy Twoja strona będzie działała tak, jak chcesz, będziesz mógł ją ulepszyć, wyodrębniając kod JavaScript do zewnętrznego pliku, aby Twoja strona zawartość w kodzie HTML nie jest tak zaśmiecona elementami bez zawartości, takimi jak JavaScript.
Jeśli po prostu skopiujesz i użyjesz skryptów JavaScript napisanych przez inne osoby, ich instrukcje dotyczące dodawania ich skryptów do Twojej strony mogły spowodować, że jedna lub więcej dużych sekcji JavaScript jest faktycznie osadzonych na Twojej stronie internetowej, a ich instrukcje nie mówią tego jak możesz przenieść ten kod ze swojej strony do osobnego pliku i nadal działać w JavaScript. Nie martw się jednak ponieważ niezależnie od tego jakiego kodu JavaScript używasz na swojej stronie możesz łatwo przenieść JavaScript ze swojej strony i ustawić go jako osobny plik (lub pliki jeśli masz więcej niżjeden fragment JavaScriptu osadzony w Strona). Proces robienia tego jest zawsze taki sam i najlepiej jest zilustrowany przykładem.
Przyjrzyjmy się, jak fragment kodu JavaScript może wyglądać po osadzeniu na Twojej stronie. Twój rzeczywisty kod JavaScript będzie się różnić od pokazanego w poniższych przykładach, ale proces jest w każdym przypadku taki sam.
Przykład pierwszy
|_+_|Przykład drugi
|_+_|Przykład trzeci
|_+_|Twój osadzony kod JavaScript powinien wyglądać jak jeden z trzech powyższych przykładów. Oczywiście rzeczywisty kod JavaScript będzie się różnić od pokazanego, ale kod JavaScript prawdopodobnie zostanie osadzony na stronie przy użyciu jednej z trzech powyższych metod. W niektórych przypadkach Twój kod może używać przestarzałego język='javascript' zamiast type='tekst/javascript' w takim przypadku możesz chcieć zaktualizować swój kod na początek, zastępując atrybut języka atrybutem typu.
Zanim będziesz mógł wyodrębnić kod JavaScript do jego własnego pliku, musisz najpierw zidentyfikować kod do wyodrębnienia. We wszystkich trzech powyższych przykładach do wyodrębnienia są dwie linie rzeczywistego kodu JavaScript. Twój skrypt prawdopodobnie będzie miało wiele więcej linii ale można go łatwo zidentyfikować ponieważ będzie zajmował to samo miejsce na twojej stronie co dwie linie JavaScript które zaznaczyliśmy w powyższych trzech przykładach (wszystkie trzy przykłady zawierają te same dwie linie JavaScript, to tylko kontener wokół nich jest nieco inny).
- Pierwszą rzeczą, którą musisz zrobić, aby faktycznie wyodrębnić JavaScript do osobnego pliku, jest otwarcie zwykłego edytora tekstu i uzyskanie dostępu do zawartości swojej strony internetowej. Następnie musisz zlokalizować osadzony kod JavaScript, który będzie otoczony jedną z odmian kodu pokazanych w powyższych przykładach.
- Po zlokalizowaniu kodu JavaScript musisz go zaznaczyć i skopiować do schowka. W powyższym przykładzie kod do wybrania jest podświetlony, nie trzeba wybierać tagów skryptu ani opcjonalnych komentarzy, które mogą pojawić się wokół kodu JavaScript.
- Otwórz kolejną kopię edytora zwykłego tekstu (lub inną kartę, jeśli Twój edytor obsługuje otwieranie więcej niż jednego pliku na raz) i wklej tam zawartość JavaScript.
- Wybierz opisową nazwę pliku, której chcesz użyć dla nowego pliku, i zapisz nową zawartość, używając tej nazwy pliku. W przykładowym kodzie celem skryptu jest wyrwanie się z ramek, aby właściwa nazwa mogła być: framebreak.js .
- Więc teraz mamy JavaScript w osobnym pliku, wracamy do edytora, gdzie mamy oryginalną zawartość strony, aby wprowadzić tam zmiany, aby połączyć się z zewnętrzną kopią skryptu.
- Ponieważ mamy teraz skrypt w osobnym pliku, możemy usunąć wszystko między tagami skryptu w naszej oryginalnej treści, aby
- Ostatnim krokiem jest dodanie dodatkowego atrybutu do tagu skryptu, określającego, gdzie może znaleźć zewnętrzny kod JavaScript. Robimy to za pomocą src='nazwa pliku' atrybut. W naszym przykładowym skrypcie określilibyśmy src='framebreak.js'.
- Jedyną komplikacją jest to, że zdecydowaliśmy się przechowywać zewnętrzne skrypty JavaScript w oddzielnym folderze niż strony internetowe, które ich używają. Jeśli to zrobisz, musisz dodać ścieżkę z folderu strony internetowej do folderu JavaScript przed nazwą pliku. Na przykład, jeśli JavaScripty są przechowywane w a js folder w folderze, który zawiera nasze strony internetowe, których potrzebowalibyśmy src='js/framebreak.js'
Jak więc wygląda nasz kod po rozdzieleniu JavaScriptu do osobnego pliku? W przypadku naszego przykładowego JavaScript (zakładając, że JavaScript i HTML znajdują się w tym samym folderze) nasz kod HTML na stronie internetowej brzmi teraz:
|_+_|Mamy również osobny plik o nazwie framebreak.js, który zawiera:
|_+_|
Twoja nazwa pliku i zawartość pliku będą się znacznie różnić od tego, ponieważ wyodrębnisz kod JavaScript osadzony na Twojej stronie internetowej i nadasz plikowi opisową nazwę w oparciu o to, co robi. Faktyczny proces wydobycia będzie taki sam, niezależnie od tego, jakie wiersze zawiera.
A co z tymi dwoma pozostałymi wierszami w każdym z przykładów drugim i trzecim? Cóż, celem tych wierszy w przykładzie drugim jest ukrycie JavaScript przed Netscape 1 i Internet Explorerem 2, z których nikt już nie korzysta, więc te wiersze nie są tak naprawdę potrzebne. Umieszczenie kodu w zewnętrznym pliku ukrywa kod przed przeglądarkami, które i tak nie rozumieją tagu skryptu niż otaczanie go komentarzem HTML. Trzeci przykład jest używany dla stron XHTML aby powiedzieć walidatoromże JavaScript powinien byćtraktowany jako zawartośćstrony a nie jako HTML (jeśli używasz dokumentu HTML zamiast XHTML wtedy walidator już zna to i inne znaczniki nie są potrzebne). Z JavaScript w osobnym pliku, nie ma już żadnego JavaScriptu na stronie, który mógłby zostać pominięty przez walidatory, więc te wiersze nie są już potrzebne.
Jednym z najbardziej użytecznych sposobów wykorzystania JavaScriptu w celu dodania funkcjonalności do strony internetowej jest wykonanie pewnego rodzaju przetwarzania w odpowiedzi na działanie użytkownika. Najczęstszą akcją, na którą chcesz odpowiedzieć, będzie kliknięcie przez użytkownika. Program obsługi zdarzeń, który pozwala odpowiadać odwiedzającym, którzy klikają coś, nazywa się na kliknięcie .
Kiedy większość ludzi po raz pierwszy myśli o dodaniu obsługi zdarzeń onclick do swojej strony internetowej, od razu myśli o dodaniu go do etykietka. Daje to fragment kodu, który często wygląda tak:
|_+_|
To jest zło sposób użycia onclick, chyba że masz rzeczywisty znaczący adres w atrybucie href, aby osoby bez JavaScript zostały przeniesione gdzieś po kliknięciu linku. Wiele osób pomija również „return false” w tym kodzie, a następnie zastanawia się, dlaczego górna część bieżącej strony jest zawsze ładowana po uruchomieniu skryptu (a właśnie to polecenie href=„#” nakazuje stronie, chyba że false jest zwracany ze wszystkich programów obsługi zdarzeń.Oczywiście, jeśli masz coś znaczącego jako miejsce docelowe linku, możesz chcieć się tam udać po uruchomieniu kodu onclick i wtedy nie będziesz potrzebować 'return false'.
Wiele osób nie zdaje sobie sprawy, że można dodać obsługę zdarzeń onclick do każdy Tag HTML na stronie internetowej w celu interakcji, gdy odwiedzający kliknie tę treść. Jeśli więc chcesz, aby coś się uruchamiało, gdy ludzie klikają obraz, możesz użyć:
|_+_|
Jeśli chcesz uruchomić coś, gdy ludzie klikną jakiś tekst, możesz użyć:
|_+_|Oczywiście nie dają one automatycznej wizualnej wskazówki, że pojawi się odpowiedź, jeśli odwiedzający kliknie na nie w sposób, w jaki robi to link, ale możesz łatwo dodać tę wizualną wskazówkę, odpowiednio stylizując obraz lub rozciągając.
Inną rzeczą, na którą należy zwrócić uwagę przy tych sposobach dołączania obsługi zdarzeń onclick, jest to, że nie wymagają one „return false”, ponieważ nie ma domyślnej akcji, która nastąpi po kliknięciu elementu, który musi zostać wyłączony.
Te sposoby dołączania onclick są dużym ulepszeniem w stosunku do kiepskiej metody, z której korzysta wiele osób, ale wciąż daleko do najlepszego sposobu jej kodowania. Jednym z problemów związanych z dodawaniem onclick przy użyciu dowolnej z powyższych metod jest to, że nadal miesza się kod JavaScript z kodem HTML. na kliknięcie jest nie atrybut HTML, jest to procedura obsługi zdarzeń JavaScript. W związku z tym, aby oddzielić nasz kod JavaScript od naszego kodu HTML, aby ułatwić utrzymanie strony, musimy umieścić odwołanie onclick z pliku HTML do osobnego pliku JavaScript, do którego należy.
Najprostszym sposobem na to jest zastąpienie onclick w kodzie HTML przez ID to ułatwi dołączenie obsługi zdarzeń do odpowiedniego miejsca w kodzie HTML. Więc nasz kod HTML może teraz zawierać jedno z tych stwierdzeń:
|_+_|Następnie możemy zakodować JavaScript w osobnym pliku JavaScript, który jest albo połączony w dolnej części strony lub w nagłówku strony, a nasz kod znajduje się w funkcji, która jest wywoływana po zakończeniu ładowania strony . Nasz JavaScript do dołączania obsługi zdarzeń wygląda teraz tak:
|_+_|Jedna rzecz do zapamiętania. Zauważysz, że zawsze pisaliśmy onclick całkowicie małymi literami. Kiedy kodujesz oświadczenie w swoim kodzie HTML, zobaczysz, że niektórzy ludzie piszą je jako onClick. Jest to błędne, ponieważ wszystkie nazwy programów obsługi zdarzeń JavaScript są pisane małymi literami i nie ma takiego modułu obsługi jak onClick. Możesz sobie z tym poradzić, umieszczając kod JavaScript bezpośrednio w tagu HTML, ponieważ w HTML nie jest rozróżniana wielkość liter, a przeglądarka zmapuje go na poprawną nazwę. Nie możesz uciec od złej wielkości liter w samym JavaScript, ponieważ JavaScript rozróżnia wielkość liter i nie ma czegoś takiego w JavaScript jak onClick.
Ten kod jest ogromnym ulepszeniem w stosunku do poprzednich wersji, ponieważ teraz zarówno dołączamy zdarzenie do właściwego elementu w naszym HTML, jak i mamy JavaScript całkowicie oddzielony od HTML. Możemy jednak jeszcze bardziej to poprawić.
Jedynym problemem, który pozostaje, jest to, że możemy dołączyć tylko jeden moduł obsługi zdarzenia onclick do określonego elementu. Jeśli w dowolnym momencie będziemy musieli dołączyć inny moduł obsługi zdarzenia onclick do tego samego elementu, to poprzednio dołączone przetwarzanie nie będzie już dołączone do tego elementu. Kiedy dodajesz wiele różnych skryptów do swojej strony internetowej w różnych celach, istnieje przynajmniej możliwość, że dwa lub więcej z nich może chcieć zapewnić pewne przetwarzanie, które zostanie wykonane po kliknięciu tego samego elementu. Brudnym rozwiązaniem tego problemu jest określenie, gdzie ta sytuacja się pojawia i połączenie przetwarzania, które należy wywołać razem, z funkcją, która wykonuje całe przetwarzanie.
Chociaż takie starcia są mniej powszechne w przypadku onclick niż w przypadku obciążenia, konieczność wcześniejszej identyfikacji kolizji i łączenia ich ze sobą nie jest idealnym rozwiązaniem. Wcale nie jest to rozwiązanie, gdy faktyczna obróbka, która musi być dołączona do elementu, zmienia się w czasie, tak że czasami jest jedna rzecz do zrobienia, czasami inna, a czasami obie.
Najlepszym rozwiązaniem jest całkowite zaprzestanie używania modułu obsługi zdarzeń i zamiast tego użycie detektora zdarzeń JavaScript (wraz z odpowiednim attachEvent dla Jscript- ponieważ jest to jedna z tych sytuacji, w których JavaScript i JScript różnią się). Najłatwiej to zrobić, tworząc najpierw funkcję addEvent, która doda albo detektor zdarzeń, albo załącznik, w zależności od tego, który z nich obsługuje uruchamiany język;
|_+_|Możemy teraz dołączyć przetwarzanie, które chcemy, aby nastąpiło po kliknięciu naszego elementu za pomocą:
|_+_|Użycie tej metody dołączania kodu do przetworzenia po kliknięciu elementu oznacza, że wykonanie kolejnego wywołania addEvent w celu dodania kolejnej funkcji do uruchomienia po kliknięciu określonego elementu nie zastąpi wcześniejszego przetwarzania nowym przetwarzaniem, ale zamiast tego pozwoli obie funkcje do uruchomienia. Podczas wywoływania addEvent nie musimy wiedzieć, czy mamy już dołączoną do elementu funkcję, która ma zostać uruchomiona po kliknięciu, nowa funkcja zostanie uruchomiona wraz z funkcjami, które były wcześniej dołączone.
Czy powinniśmy potrzebować możliwości usuwania funkcji z tego, co jest uruchamiane po kliknięciu elementu, a następnie możemy utworzyć odpowiednią funkcję deleteEvent, która wywołuje odpowiednią funkcję do usuwania detektora zdarzeń lub dołączonego zdarzenia?
Jedyną wadą tego ostatniego sposobu dołączania przetwarzania jest to, że naprawdę stare przeglądarki nie obsługują tych stosunkowo nowych sposobów dołączania przetwarzania zdarzeń do strony internetowej. Powinno być wystarczająco mało osób używających tak przestarzałych przeglądarek, aby zignorować je w tym, co piszemy w J(ava)Script, poza pisaniem naszego kodu w taki sposób, aby nie powodował ogromnej liczby komunikatów o błędach. Powyższa funkcja jest napisana tak, aby nic nie robiła, jeśli żaden z jej sposobów nie jest obsługiwany. Większość z tych naprawdę starych przeglądarek również nie obsługuje metody odwoływania się do HTML-a getElementById, a więc prosty if (!document.getElementById) zwraca false; u góry dowolnej funkcji, która wykonuje takie wywołania, również byłaby odpowiednia. Oczywiście wiele osób piszących JavaScript nie zwraca uwagi na tych, którzy wciąż używają starych przeglądarek, więc ci użytkownicy muszą przyzwyczaić się do wyświetlania błędów JavaScript na prawie każdej odwiedzanej stronie internetowej.
Które z tych różnych sposobów używasz, aby dołączyć przetwarzanie do swojej strony, aby było uruchamiane, gdy użytkownicy coś klikną? Jeśli sposób, w jaki to robisz, jest bliższy przykładom na górze strony niż przykładom na dole strony, to być może nadszedł czas, abyś pomyślał o ulepszeniu sposobu pisania przetwarzania onclick, aby użyć jednej z lepszych metod przedstawione niżej na stronie.
Patrząc na kod dla detektora zdarzeń w różnych przeglądarkach, zauważysz, że istnieje czwarty parametr, który wywołaliśmy uC , którego użycie nie wynika z wcześniejszego opisu.
Przeglądarki mają dwie różne kolejności, w których mogą przetwarzać zdarzenia po wyzwoleniu zdarzenia. Mogą działać od zewnątrz do wewnątrz, od tagu do tagu, który wywołał zdarzenie, lub od wewnątrz na zewnątrz, zaczynając od najbardziej konkretnego tagu. Te dwa są nazywane zdobyć oraz bańka Odpowiednio, a większość przeglądarek pozwala wybrać kolejność, w której ma być uruchamiane wielokrotne przetwarzanie, ustawiając ten dodatkowy parametr.
- uC = prawda do przetwarzania podczas fazy przechwytywania
- uC = false do przetwarzania podczas fazy bąbelkowej.
Jeśli więc istnieje kilka innych tagów owiniętych wokół tego, który zdarzenie zostało wyzwolone w fazie przechwytywania, rozpoczyna się najpierw od tagu najbardziej zewnętrznego i przesuwa się w kierunku tego, który wyzwolił zdarzenie, a następnie po przetworzeniu tagu, do którego zostało dołączone zdarzenie. faza bąbelkowa odwraca proces i ponownie wychodzi.
Internet Explorer i tradycyjne programy obsługi zdarzeń zawsze przetwarzają fazę bąbelkową, a nigdy fazę przechwytywania, dlatego zawsze zaczynają się od najbardziej konkretnego tagu i pracują na zewnątrz.
Tak więc z obsługą zdarzeń:
|_+_|klikając na XX wypłynie najpierw wyzwalając alert ('b'), a następnie alert ('a').
Gdyby te alerty zostały dołączone za pomocą detektorów zdarzeń z wartością uC true, wszystkie nowoczesne przeglądarki z wyjątkiem Internet Explorera najpierw przetworzyłyby alert ('a'), a następnie alert ('b').