【问题标题】:What does the JavaScript pseudo protocol actually do? [duplicate]JavaScript 伪协议实际上做了什么? [复制]
【发布时间】:2012-04-09 04:08:27
【问题描述】:

或者说有什么区别

onclick="myFunction()"

onclick="JavaScript:myFunction()"

【问题讨论】:

  • 也许您的意思是 <a onclick="…"><a href="javascript:…">?将javascript: 放在 onclick 属性中从来没有做过任何有用的事情。
  • 哇,距离我上次使用onclick 属性已经很久了。 Unobtrusive javascript 让您可以在 javascript 中的元素上绑定事件,并且更加可组合。
  • ...JavaScript(TM) 大写疯狂开始了。
  • @ephemient 请参阅我的回答,了解事件处理程序中 javascript: 前缀的原因

标签: javascript


【解决方案1】:

事件处理程序中的JavaScript: TYPE/LABEL/PREFIX(找不到它的实际名称)仅用于一个目的

在 IE 中,IFF 页面上的第一个脚本是 NOT JavaScript,页面其余部分的内联 JavaScript 有(仍然有?)有 javascript:前缀它。

不要与 href 中的javascript: 协议 混淆(顺便说一句,也应该避免)。 href="javascript:..." 仅在 AREA 标记中的旧网景中才需要。当您看到href="javascript:void(0)" 时,有人需要改用onclick="....; return false",除非他们把它放在那里以提醒用户该链接是由javascript 驱动的。关闭JS会失败。

我从 msdn 查找了官方文档,但这里有一些讨论支持我:

Calling VBScript from Javascript

Internet Explorer 默认使用第一个脚本元素的语言 它解析。所以如果第一个脚本元素是 javascript,你不应该 需要在您的事件处理程序中指定“javascript:”。

http://www.webdeveloper.com/forum/archive/index.php/t-135462.html

你必须告诉 IE 你正在使用 VBS 和 JScript,否则 假设在这种情况下所有功能都是 VBS。要么添加一个 (空?)JavaScript 脚本元素 [在页面顶部] 或使用 jscript: 协议 改变。 onchange="jscript:location.hash=this[this.selectedIndex].value;"

例子

<html>
<head>
<script language="VBScript">
' some vbscript here forces the default language
' of the page to be VBScript and not jScript/JavaScript
</script>
</head>
<body onload="javascript:alert('I am inline in an event handler - boo me')">
.
.
<a href="..." onclick="javascript:alert('and so am I'); return false">Click</a>
.
<a href="javascript:alert('javascript: PROTOCOL is NOT the same (but avoid it too)')">
  Click
</a>


</body>
</html> 

【讨论】:

  • 哇,我不知道 IE 中的这种奇怪现象!很高兴没有遇到它。
【解决方案2】:

正如@ephemient 在他的评论中提到的,onclick 中的javascript 什么都不做,它基本上是一个无用的标签。前缀javascript 用于&lt;a&gt; 标签中,告诉浏览器以javascript 运行以下内容,就像您在浏览器中输入了相同的内容一样。你可以在自己浏览器的地址栏试试看,输入javascript: alert("Hello")就行了。

总结一下:

onclick:浏览器认为这是javascript,所以如果你输入javascript:作为前缀,浏览器会说:'哦,多么古怪,你放了一个标签'。

&lt;a href 或浏览器位置栏中:浏览器不希望这是javascript,因此如果您输入javascript: 作为前缀,浏览器会说:“哦,我需要以javascript 运行它” .

【讨论】:

  • 我不同意“就好像你在浏览器中输入了同样的东西”。如果将 javascript PREFIX/LABEL 粘贴到浏览器中,它会神奇地变成 PROTOCOL,但这纯粹是副作用,与 onclick 无关
  • 这正是我要说的,我更新了答案以使其更清楚,因为显然我没有做得很好。
猜你喜欢
  • 2014-07-14
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2020-11-21
  • 2015-02-26
  • 2017-06-29
相关资源
最近更新 更多