当使用其他单词代替onclick值中的“ javascript”时,为什么浏览器不会引发错误?


100

我继承了一个网站,就遇到了这种好奇心:

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

我可以显示包含它的页面,然后单击链接以将确认对话框与将“ jamoscript” 更改为“ ” 时完全相同javascript。加载页面或单击链接时,Firebug控制台中不会显示任何诊断信息。怎么了 搜寻jamoscript不会发现任何有趣的事情。

有人可以解释这种行为吗?

Answers:


144

“ onclick”属性的字符串值被视为简单的JavaScript代码。JavaScript包含标记语句的规定,因此代码是return带有标签“ jamoscript” 的语句。换句话说,这是:

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

是完全合法的JavaScript。标签使用不多,所以不熟悉。

与“ javascript:”前缀有关的唯一上下文是何时需要URL,就像<a>标记的“ href”属性一样。


53
这个问题使我真的希望该语言被称为“ JamoScript”。
Pointy 2014年

5
这使我想起了以下功能的著名问题:function foo(a) { x: 2 }

80
我在这里创建了一个帐户,只是为了告诉您这行代码(?-我不是程序员)毫无疑问是希腊人写的,或者至少“ jamoscirpt”是希腊人提出的。“ Jamo”是一种尝试使用英语字母的声音来产生希腊语“ f --- ing”一词的声音的方式。因此,如果您尝试大声朗读“ jamoscript”,那么一个知道“ script”一词的希腊人将理解“ f --- ing script”。如果使用字母“ g”代替“ j”,则预期效果会更加确定,但我想存在“ j-ava”的预期效果。
Alecos Papadopoulos

6
@AlecosPapadopoulos哇,真棒。如果有什么事情,这让我想甚至更多的语言实际上是所谓的“JamoScript” :)
尖尖

6
@asawyer我感谢信息(+1),但请不要诱惑我摆脱我温柔的在线角色,并恢复为真实的角色...
Alecos Papadopoulos 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.