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

cgp*_*cgp 20 javascript correctness

我的印象是,我只需要在URL属性中使用JavaScript时指定"协议",例如在hrefs中.这是唯一"有用"的背景javascript:吗?

明智的:

<a href="javascript:alert('Hello')">World!</a>
Run Code Online (Sandbox Code Playgroud)

愚蠢:

<form onsubmit="javascript:alert('oops!')">
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?或者是否需要注意一些模糊的bug /用例?

CMS*_*CMS 15

javascript:事件处理程序上的伪协议将被忽略,您不需要它,JavaScript引擎将解释javascript:Label语句.

标签只是为语句提供标识符,并允许您在程序的其他位置引用它.

恕我直言,这个伪协议只对bookmarklet有用...

推荐文章:


Nic*_*ole 6

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

<a href="#" onclick="doSomething(); return false;">Link</a>
Run Code Online (Sandbox Code Playgroud)

要么

<a href="javascript://" onclick="doSomething();">Link</a>
Run Code Online (Sandbox Code Playgroud)

javascript协议存在一个(有点模糊)错误- 在Internet Explorer*中,当您单击链接时,它会认为您正在离开页面.如果您使用的是window.onbeforeunload,则此时将显示您的导航消息.仅仅因为这个原因,我们已经完全停止使用javascript协议,因此我们没有显示此错误,因为我们在向某个页面添加导航消息时忘记检查它.


*我可能应该在我第一次写这个时指定版本.我根本不记得了,但是为了防止这个bug只存在于IE 6或7等现在大多已经不存在的浏览器中,你最好自己测试一下.


Poi*_*nty 5

永远不要指定它.在<a>标签中执行此操作是错误的,而应将其编码为:

<a href='#' onclick='alert("Hello")'>World</a>
Run Code Online (Sandbox Code Playgroud)

这是过去几天的残余.我唯一能想到它在哪里使用的将是浏览器地址栏(和书签书签).将它保留在您的页面之外.

  • 记得`return false;`如果你使用#以便它取消`href`动作并且不会到达页面顶部或者(更糟)改变你的哈希,如果你有一个你实际上用于某事的哈希.或者,您可以使用`javascript://`作为`href`,它将真正无所作为. (6认同)
  • +1 @Renesis.此外,您甚至可以使用该方法在href中添加简单描述.例如:`javascript://在新窗口中打开`.这是一个JS评论,所以你可以把任何东西放在那里.这很有用,因为当用户将鼠标悬停在链接上时,它将显示在状态栏中 (5认同)