我什么时候需要指定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这样的事件来模拟一个锚(这是更多的工作,但不会“破坏”锚标记的预期行为)。