代码之家  ›  专栏  ›  技术社区  ›  Diodeus - James MacFarlane

您是否需要在onclick中指定'javascript'?

  •  44
  • Diodeus - James MacFarlane  · 技术社区  · 16 年前

    afaik,您不需要在onclick中指定协议:

    onclick="javascript:myFunction()" 坏的

    onclick="myFunction()"

    今天我注意到 this article 关于谷歌分析 他们 正在使用它:

    <a href="http://www.example.com" onClick="javascript: pageTracker._trackPageview('/outgoing/example.com');">
    

    这个例子是完全错误的,还是有理由具体说明 javascript: 除了A href ?

    8 回复  |  直到 11 年前
        1
  •  44
  •   Ates Goral    16 年前

    这里的一些回答声称“javascript:”前缀是“从旧时代遗留下来的”,这意味着它是有意的,特别是由浏览器处理以实现向后兼容性。是否有确凿证据表明这是事实(是否有人检查过源代码)?

    <span onclick="javascript:alert(42)">Test</span>
    

    对我来说,这意味着:

    javascript:
        alert(42);
    

    意思是,“javascript:”只是一个标签,没有任何效果。这也适用于:

    <span onclick="foobar:alert(42)">Test</span>
    

    更新:

    我做了一个小实验,结果发现,“javascript:”是由IE专门处理的,但绝对不是由Firefox、Safari、Opera或Chrome处理的:

    <span onclick="javascript:while (true) { alert('once'); break javascript; }">Test</span>
    

    在非IE上,这只会警告“一次”,一次,然后跳出循环。在IE上,我得到一个“找不到标签”错误。以下功能在所有浏览器中都可以正常工作:

    <span onclick="foo:while (true) { alert('once'); break foo; }">Test</span>
    

    更新2:

    我刚刚意识到 http://crisp.tweakblogs.net/blog/the-useless-javascript-pseudo-protocol.html 在上面的一个答案中,几乎都谈到了同样的事情。

        2
  •  7
  •   Peter Mortensen icecrime    11 年前

    锚上不需要它,也不是很好的练习。锚只用于导航。 关于这个话题的一篇文章是 The useless JavaScript: pseudo-protocol .

        3
  •  5
  •   Peter Mortensen icecrime    11 年前

    一开始,你也可以使用 VBScript 在Internet Explorer中,而不是JavaScript,因此指定“javascript:…”是标准的。

    今天,好吧,不疼…将来总有其他的浏览器脚本语言。

        4
  •  5
  •   Peter Mortensen icecrime    11 年前

    Specifying the scripting language (18.2.2英寸) HTML 4.01规范 , 脚本 )

        5
  •  5
  •   Peter Mortensen icecrime    11 年前

    我一直认为这是不好的使用,因为您可以在 URL javascript: 前缀:

    <a href="javascript:void(alert('really bad usage!'))">
    

    ( Web Forms 有人吗?)

    只有无知的Web开发人员才使用事件声明和a href声明。

    我想说的是,现在大多数情况下,甚至事件属性都是不好的做法,最好的方法是使用.attachevent(Internet Explorer)和addEventListener(其他浏览器,和往常一样)。

    最后…谷歌并不总是万能的。他们往往更关心的是工作的东西,而不是一直遵循标准。

        6
  •  2
  •   Tomalak    16 年前

    我认为“javascript:”前缀是旧时代遗留下来的,当时仍然有一种模糊的可能性 任何其他 而不是javascript可以处理事件。

    今天它是可选的,出于向后兼容性的原因而保留。但我不会说 坏的 因此,这是不必要的。

        7
  •  2
  •   Peter Mortensen icecrime    11 年前

    在Internet Explorer中,可以将默认语言设置为 VBScript 一页。在早期,人们总是认为可以使用另一种语言在浏览器中编写脚本。事实证明,这种语言并没有实质性地实现。

    我自己也不在乎这个语言前缀。

        8
  •  0
  •   George Stocker NotMe    16 年前

    这对您的维护程序员来说是很好的实践。编译器知道两者之间的区别,但刚从大学毕业的那个年轻的Web开发人员可能不知道。