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

Jam*_*ice 12 javascript jslint jshint

当JSLint和JSHint遇到标识符语句时,它们都会发出警告,这些语句的标识符与以下正则表达式匹配:

/^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i
Run Code Online (Sandbox Code Playgroud)

例如,以下代码段从JSLint生成"JavaScript URL"警告,并且"标签'javascript'看起来像javascript url"来自JSHint的警告(函数包装器是不必要的,但JSLint不喜欢不带功能的标签语句-scoped并提出不同的警告):

function example(x, y) {
javascript:
    while (x) {
        while (y) {
            break javascript;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,没有浏览器关心它,即使它立即出现在书签中的"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; }
Run Code Online (Sandbox Code Playgroud)

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

bfa*_*tto 4

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

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

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