Чому браузери не видають помилку, коли замість "javascript" у значенні onclick використовується будь-яке інше слово?


100

Я успадкував веб-сайт і просто натрапив на цю цікавість:

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

Я можу відобразити сторінку, що її містить, і натиснути на посилання, щоб отримати діалогове вікно підтвердження точно так само, як я, коли я зміню " jamoscript" на " javascript". У консолі Firebug діагностика не відображається ні при завантаженні сторінки, ні при натисканні на посилання. Що, ей? Гугл для джамоскрипту не виявляє нічого цікавого.

Хтось може пояснити таку поведінку?

Відповіді:


144

Значення рядка атрибута "onclick" вважається простим кодом JavaScript. JavaScript включає положення для мічених операторів , так що код є returnтвердженням з міткою "jamoscript". Іншими словами, це:

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

ідеально законний JavaScript. Етикетки використовуються мало, тому вони незнайомі.

Єдиний контекст, в якому префікс "javascript:" має значення, коли очікується URL-адреса, як це відбувається з атрибутом <a>тегів "href" .


53
Це питання змушує мене дуже хотіти, щоб мова називалася "JamoScript".
Pointy

5
Це нагадує мені про відому проблему , що робить наступне: function foo(a) { x: 2 }.

80
Я створив тут обліковий запис, просто щоб сказати вам, що цей рядок коду (? - Я не програміст), без сумніву, був написаний грецькою мовою, або принаймні "jamoscirpt" був запропонований греком. "Джамо" - це те, як можна намагатися використовувати звуки англійських букв для видачі звуку, який має слово "f --- ing" у грецькій мові. Отже, якщо ви спробуєте прочитати вголос "jamoscript", грецька особа, яка знає слово "сценарій", зрозуміє "f --- ing script". Задуманий ефект був би більш певним, якби замість "j" було використано букву "g", але, мабуть, була призначена гра з "j-ava".
Алекос Пападопулос

6
@AlecosPapadopoulos Ух, це приголомшливо. Якщо що-небудь, змушує мене ще більше бажати, щоб мову насправді називали "JamoScript" :)
Pointy

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