为啥在 onclick 的值中使用任何其他词代替“javascript”时浏览器不会抛出错误?

Posted

技术标签:

【中文标题】为啥在 onclick 的值中使用任何其他词代替“javascript”时浏览器不会抛出错误?【英文标题】:Why don't browsers throw an error when any other word is used in place of 'javascript' in the value of onclick?为什么在 onclick 的值中使用任何其他词代替“javascript”时浏览器不会抛出错误? 【发布时间】:2015-02-20 18:12:01 【问题描述】:

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

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

我可以显示包含它的页面并单击链接以获取确认对话框,就像我将“jamoscript”更改为“javascript”时所做的一样。在加载页面或单击链接时,Firebug 控制台中不会显示任何诊断信息。什么嘿?谷歌搜索 jamoscript 并没有发现任何有趣的东西。

谁能解释这种行为?

【问题讨论】:

【参考方案1】:

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

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

是完全合法的 JavaScript。标签用的不多,所以比较陌生。

“javascript:”前缀的唯一上下文是预期 URL 的情况,&lt;a&gt; 标记的“href”属性就是这种情况。

【讨论】:

这个问题让我真希望该语言被称为“JamoScript”。 这让我想起了下面这个著名的问题:function foo(a) x: 2 我在这里创建了一个帐户,只是为了告诉你这行代码(?-我不是程序员)毫无疑问是由希腊人编写的,或者至少“jamoscirpt”是由一个希腊人。 “Jamo”是人们尝试使用英文字母的发音来产生“f---ing”一词在希腊语中的发音的方式。因此,如果您尝试大声朗读“jamoscript”,一个知道“script”一词的希腊人会理解“f---ing script”。如果使用字母“g”代替“j”,预期效果会更加确定,但我想“j-ava”是预期的游戏。 @AlecosPapadopoulos 哇,太棒了。如果有的话,我什至希望更多该语言实际上被称为“JamoScript”:) @asawyer 我感谢您提供的信息 (+1),但请不要诱使我摆脱温顺的在线角色并恢复我的真实角色...

以上是关于为啥在 onclick 的值中使用任何其他词代替“javascript”时浏览器不会抛出错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何测试变量是不是不等于两个值中的任何一个?

ClearML 从记录的值中获取最大值

如何使用 re 库提取 xml 值中给定标签列表的值? [复制]

为啥我在从 MS Access 数据库中提取的十进制值中添加了零?

如何在 Python 中直接获取字典键作为变量(而不是通过从值中搜索)?

为啥我不能从 onclick 属性调用名为 clear 的函数?