Dlaczego przeglądarki nie wyświetlają błędu, gdy zamiast „javascript” w wartości onclick używane jest inne słowo?

100

Odziedziczyłem stronę internetową i właśnie natknąłem się na tę ciekawostkę:

<a href="/delete"  onClick="jamoscript:return confirm('Do you really want to do that?');">Delete all</a>

Mogę wyświetlić zawierającą go stronę i kliknąć łącze, aby wyświetlić okno dialogowe potwierdzenia, dokładnie tak samo, jak robię to po zmianie opcji „ jamoscript” na „ javascript”. Żadna diagnostyka nie jest wyświetlana w konsoli Firebug, ani po załadowaniu strony, ani po kliknięciu łącza. Co do cholery? Wyszukiwanie w Google jamoscript nie przynosi nic interesującego.

Czy ktoś może wyjaśnić to zachowanie?

sootsnoot
źródło

Odpowiedzi:

144

Wartość ciągu atrybutu „onclick” jest traktowana jako prosty kod JavaScript. JavaScript zawiera postanowienia dotyczące oznaczonych instrukcji , więc kod jest returninstrukcją z etykietą „jamoscript”. Innymi słowy, to:

jamoscript: return confirm("Do you really want to hurt me?");

jest całkowicie legalnym JavaScriptem. Etykiety nie są często używane, więc są nieznane.

Jedynym kontekstem, w którym prefiks „javascript:” ma znaczenie, jest oczekiwanie adresu URL, tak jak ma to miejsce w przypadku atrybutu „href” <a>tagów.

Spiczasty
źródło
53
To pytanie sprawia, że ​​naprawdę żałuję, że język nie został nazwany „JamoScript”.
Pointy
5
To mi przypomina słynnego problemu, co robi co następuje: function foo(a) { x: 2 }.
80
Założyłem tutaj konto, żeby ci tylko powiedzieć, że ta linia kodu (? - nie jestem programistą) została bez wątpienia napisana przez Greka, albo przynajmniej "jamoscirpt" został zaproponowany przez Greka. „Jamo” to sposób, w jaki można by spróbować użyć dźwięków angielskich liter, aby uzyskać dźwięk, jaki ma słowo „f --- ing” w języku greckim. Więc jeśli spróbujesz przeczytać na głos „jamoscript”, Grek, który zna słowo „skrypt”, zrozumie „skrypt”. Zamierzony efekt byłby bardziej pewny, gdyby zamiast „j” użyto litery „g”, ale myślę, że była to zamierzona gra z „j-ava”.
Alecos Papadopoulos
6
@AlecosPapadopoulos wow, to jest niesamowite. Jeśli już, to jeszcze bardziej żałuję, że język był faktycznie nazywany „JamoScript” :)
Pointy,
6
@asawyer Doceniam informacje (+1), ale proszę, nie kuszcie mnie, bym porzucił moją potulną osobowość on-line i wróciła do mojej prawdziwej ...
Alecos Papadopoulos