标签“javascript:”会导致任何问题吗?

时间:2013-04-12 08:18:20

标签: javascript jslint jshint

JSLint和JSHint在遇到标识符语句时会发出警告,该语句的标识符与以下正则表达式匹配:

/^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i

例如,以下代码段从JSLint生成“JavaScript URL”警告,并且“标签'javascript'看起来像javascript url”来自JSHint的警告(函数包装器是不必要的,但JSLint不喜欢标记语句,不是函数作用域并引发不同的警告):

function example(x, y) {
javascript:
    while (x) {
        while (y) {
            break javascript;
        }
    }
}

据我所知,没有浏览器关心它,即使它立即出现在书签中的“javascript:”协议之后。例如,以下似乎总是有效(只需像任何书签一样粘贴到地址栏中):

javascript:(function () { javascript:for(var i = 0; i < 2; i++) { alert(i); break javascript; } }());

javascript:javascript:for(var i = 0; i < 2; i++) { alert(i); break javascript; }

标签标识符“javascript:”(或与该正则表达式匹配的任何其他字符串)是否曾引起任何问题(某些古老的浏览器可能?),以保证产生警告?为什么会产生这些警告?

2 个答案:

答案 0 :(得分:4)

我在这里大多猜测,但考虑一下:

  • javascript:不是实际协议;
  • 除了bookmarklet之外不需要它(否则它被认为是标签);
  • 警告说“看起来像 javascript网址”。

我认为JSLint建议javascript:伪协议是坏的,所以类似于它的东西也是如此,或者可能与它混淆。它会引起任何问题吗?严格来说,perhaps on IE(可能只是oldIE)。但是,正如我所说,javascript:标签可能与混淆与伪协议,而JSLint不喜欢任何可能令人困惑的东西。所以,这可能是一个解释。

答案 1 :(得分:1)

bfavaretto所说的可能是真的,尤其是最后一个要点,但也注意到javascript:伪协议是劝阻的。

MDN提及:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/void#JavaScript_URIs

“但请注意,不鼓励javascript:伪协议超过其他替代方案,例如不显眼的事件处理程序。”

关于原因的文章:http://into-the-zen.blogspot.com/2010/04/dont-use-javascript-pseudo-protocol.html

“IE6会产生一些副作用......”