2013-09-02 16 views
83

natknąłem się coś dziwnego, że tak naprawdę nigdy nie widział:Jaki jest sens "javascript:" w kodzie (nie adresy URL)?

javascript:a=a+10; 

Linia powyżej wydaje się być poprawne i ocenia szczęśliwie (przynajmniej w Firefoksie) tak samo jak wtedy, gdy javascript: część nigdy nie istniał.

Podczas gdy rozumiem przeznaczenie starego stylu javascript:void(...)<a href=".."/> używanego w ciemnych wiekach DHTML, po prostu nie mogę znaleźć żadnego przydatnego użycia tego prefiksu w prostym kodzie JavaScript.

Czy ma jakieś specjalne znaczenie?

+8

Nie mogę mówić za wszystkich, ale ** nigdy ** nie widziałem tego w prostym kodzie JS. Czy możesz dać przykład? (* To może bardzo dobrze działać, ale nie powinno to mieć żadnego wpływu, więc zawsze chciałbym wiedzieć, gdzie to zobaczyłeś *) – h2ooooooo

+0

Skąd to widziałeś? – reporter

+1

Gdzie piszesz? czy jest w tagu kotwicy lub gdzie? – pixelbyaj

Odpowiedz

97

"javascript:" to label. To powinno być używane do identyfikacji pętli, abyś mógł użyć "break javascript;", aby się z niej wyrwać, ale jest tu nadużywany. To nieszkodliwe, ale prawdopodobnie nie jest dobrym pomysłem dodanie etykiety do instrukcji, która nie jest pętlą.

+0

To dziwne, jak nazywają to etykietą, gdy jest oficjalne (jak w IANIE), to rodzaj prefiksów linków nazywa się [Schemat URI] (http://en.wikipedia.org/wiki/URI_scheme#Unofficial_but_common_URI_schemes). Cóż, to prawda, że ​​nie jest oficjalnie zarejestrowany w IANA, ale ten rodzaj konwencji nazewnictwa powinien nadal być używany. –

+17

Poza tym, jak wskazuje pytanie, nie znajduje się ono w identyfikatorze URI, ale w prostym kodzie. Jak sugeruje Quentin, prawie na pewno jest to spowodowane tym, że ktoś kopiuje i wkleja, nie rozumiejąc, co robią. – Jules

+0

Tak, ale nadal jest używany jako [URL] (http://en.wikipedia.org/wiki/Uniform_resource_locator), nawet jeśli jest używany wewnątrz href, onclick itp. Tak, zauważyłem, ale przyzwyczaiłem się do tego rodzaju pytań tutaj. –

52

Jest to poprawny składniowo (jest to label), ale bezużyteczny. To jest cargo culting spowodowane przez ludzi kopiowanie/wklejanie kodu bez jego zrozumienia.

+8

+1 dla linku do linkowania ładunków :). Kopiowanie/wklejanie osób wydaje się być szeroko rozpowszechnione w sztabach firmy odpowiedzialnych za wewnętrzny projekt aplikacji webapp. – sitifensys

+10

Czy ten artykuł wiki o kultach cargo w programowaniu nie byłby bardziej na miejscu? [1] http://en.wikipedia.org/wiki/Cargo_cult_programming – AnyOneElse

-2

Zgadzam się co do bezużyteczności tego jako etykiety, ale w niektórych przypadkach jest ona nadal przydatna. Na przykład musisz wykonać krótki fragment z paska adresu lub napisać skryptozakładkę. Ale w tym przypadku, javascript: będzie bardziej podobny do schematu pseudo-protokołu.

+7

To jest zupełnie inne. 'javascript:' na początku adresu URL powoduje, że przeglądarka wykonuje resztę adresu URL jako JavaScript. 'javascript:' na początku linii * kodu JavaScript * to etykieta o nazwie "javascript", tak jak 'foobar:' jest etykietą o nazwie '' foobar'. Są całkowicie niepowiązane i występują w różnych kontekstach, ale zdają się wyglądać podobnie. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label – Peeja

12

JavaScript może być również używany ze stron internetowych w HTML Application (HTA). W aplikacji HTA można użyć kombinacji VBScript i JavaScript. Podczas korzystania ze skryptów w aplikacji, jak poniżej, język skryptowy jest automatycznie ustawiony na VBScript.

<SCRIPT LANGUAGE='VBScript'> MsgBox 'Hi!'</SCRIPT> 

Tak więc element z zdarzeniem JavaScript onclick, jak poniżej, spowoduje błąd.

<a id="myLink" href="#" onclick="MyFunction();return false;">Click me!</a> 

Problem ten można rozwiązać poprzez wyraźne ustawić język JavaScript przez

<a id="myLink" href="#" onclick="javascript:alert('Javascript Executed!');return false;">Click me for Javascript!</a> 

Albo w VBScript przez

<a id="myLink" href="#" onclick='vbscript:msgbox "VBScript Executed!"'>Click me for VBScript!</a> 

Uwaga: Zdaję sobie sprawę, że jest to przypadek rogu, ale to jest faktycznym użyciem etykiety javascript: (czy możemy wciąż nazywać ją etykietą w tym kontekście?), którą napotkałem podczas tworzenia aplikacji HTA w mieszanym języku.

+2

Mały temat, ponieważ pierwotne pytanie dotyczy używania etykiety w prostym kodzie JavaScript, ale mimo to jest interesujące zobacz, jak może wyglądać Internet Explorer;). – sitifensys