我什么时候需要指定JavaScript协议?

我的印象是,只有在URL属性中使用JavaScript时,才需要指定“协议”,例如在hrefs中。 这是唯一的“有用的”上下文的javascript:

明智的:

 <a href="javascript:alert('Hello')">World!</a> 

愚蠢:

 <form onsubmit="javascript:alert('oops!')"> 

这是正确的吗? 还是有我需要注意的一些模糊的错误/用例?

事件处理程序上的javascript:伪协议将只被忽略,你不需要它,JavaScript引擎将把javascript:解释为标签语句 。

一个标签只是简单地为一个语句提供一个标识符,并让你在程序的其他地方引用它。

恕我直言,这个伪协议只对bookmarklets有用…

推荐文章:

  • 无用的javascript:伪协议

不要指定它,永远。 在<a>标签中这样做是错误的,它应该像这样编码:

 <a href='#' onclick='alert("Hello")'>World</a> 

这是从过去的日子里剩下的。 我唯一能想到的地方就是浏览器地址栏(和书签书签)。 把它放在你的页面之外。

正如其他答案所提到的,避免使用javascript: href链接,在事件处理程序属性中完全没有必要。 但是,由于A标签有时仍然是语义上正确的,所以如果您希望将:link:hover CSS样式应用于Internet Explorer中的元素,则需要将某些内容放入href属性中。 在这种情况下,使用:

 <a href="#" onclick="doSomething(); return false;">Link</a> 

要么

 <a href="javascript://" onclick="doSomething();">Link</a> 

有一个(有点模糊的) javascript协议的错误 – 在Internet Explorer *中,它会认为你点击链接时将离开页面。 如果您使用的是window.onbeforeunload ,那么此时您的导航消息将出现。 仅仅因为这个原因,我们已经完全停止使用javascript协议,所以我们没有显示这个bug,因为当我们添加一个导航消息到某个页面时,我们忘了检查它。


*我可能应该在我第一次写这个时指定版本。 我根本不记得,但是为了防止错误只出现在IE 6或7等现在大部分已经不存在的浏览器中,最好自己testing一下。

在实践中,你是正确的。

您需要在预期不是脚本的任何情况下执行此操作。 从理论上讲,你可以坚持使用javascript:whatever你在哪里使用URL,但是这从来没有被支持,现在正式推荐使用。

但是 ,你真的不应该使用javascript:根本。 对于链接,您可以使用onclick属性。 现在实际发生的事情是,JavaScript引擎将javascript:标识为:标签,这就是代码执行的原因。

你应该都检查http://bytes.com/topic/javascript/answers/504856-javascript-pseudo-protocol-event-handlers特别是由“Lasse Reichstein尼尔森”的post,因为大多数答案在这里是不正确的在某种方式。

还要记住,锚标记根本不需要href! 那是<a>hi</a>是有效的xhtml。 使用href="#"是,它可能会滚动到页面的顶部..这是根本不需要的。 最后,如果你实际上不需要锚标签的行为,你不应该使用它。 你可以使用css( cursor:pointer )和mouseenter和mouseleave这样的事件来模拟一个锚(这是更多的工作,但不会“破坏”锚标记的预期行为)。