12

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

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

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

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:”(或任何其他与该正则表达式匹配的字符串)是否会导致任何问题(可能是某些古老的浏览器?),从而保证生成的警告?为什么会产生这些警告?

4

2 回答 2

4

我主要是在这里猜测,但请考虑一下:

  • javascript:不是一个实际的协议;
  • 除了小书签以外的任何地方都不需要它(否则它被假定为标签);
  • 警告说它“看起来像一个 javascript url”。

我认为 JSLint 暗示javascript:伪协议不好,任何与它相似或可能与它混淆的东西也是如此。它会引起任何问题吗?严格来说,也许是在 IE 上(也许只有 oldIE)。但是,正如我所说,javascript:标签可能会与伪协议混淆,而 JSLint 不喜欢任何可能混淆的东西。所以,这可能是一个解释。

于 2013-04-13T01:20:49.777 回答
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会产生一些副作用……”

于 2013-04-13T04:08:50.163 回答