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

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 に答える