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