Почему браузеры не выдают ошибку, когда в значении onclick вместо «javascript» используется любое другое слово?


100

Я унаследовал веб-сайт и наткнулся на любопытство:

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

Я могу отобразить страницу, содержащую его, и щелкнуть ссылку, чтобы получить диалоговое окно подтверждения точно так же, как я это делаю, когда меняю " jamoscript" на " javascript". Диагностика не отображается в консоли Firebug ни при загрузке страницы, ни при нажатии на ссылку. Что за хрень? Поиск в Google по jamoscript ничего интересного не дает.

Кто-нибудь может объяснить такое поведение?

Ответы:


144

Строковое значение атрибута onclick рассматривается как простой код JavaScript. JavaScript включает положения для помеченных операторов , так что код представляет собой returnоператор с меткой «jamoscript». Другими словами, это:

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

совершенно законный JavaScript. Ярлыки используются нечасто, поэтому они незнакомы.

Единственный контекст, в котором префикс «javascript:» имеет значение, - это когда ожидается URL, как в случае с атрибутом «href» <a>тегов.


53
Этот вопрос заставляет меня искренне желать, чтобы язык назывался «JamoScript».
Pointy

5
Это напоминает мне о известной проблеме , что делает следующее: function foo(a) { x: 2 }.

80
Я создал здесь учетную запись, просто чтобы сказать вам, что эта строка кода (? - Я не программист) без всякого сомнения была написана греком или, по крайней мере, "jamoscirpt" был предложен греком. «Джамо» - это то, как можно попытаться использовать звуки английских букв для получения звука, который имеет слово «ебать» в греческом языке. Так что, если вы попытаетесь прочитать вслух «jamoscript», грек, знающий слово «сценарий», поймет «гребаный сценарий». Предполагаемый эффект был бы более определенным, если бы вместо «j» использовалась буква «g», но я предполагаю, что это предполагаемая игра с «j-ava».
Алекос Пападопулос,

6
@AlecosPapadopoulos вау, это круто. Во всяком случае, мне еще больше хочется, чтобы этот язык на самом деле назывался "JamoScript" :)
Pointy

6
@asawyer Я ценю информацию (+1), но, пожалуйста, не соблазняйте меня сбросить мою кроткую онлайн-личность и вернуться к моей настоящей ...
Алекос Пападопулос,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.