14

IEをブロックすることは、間違いなくベストプラクティスではありませんが、既存のアプリケーションに対する私の要件の1つです。IE 10では条件付きコメントを使用できないため、これを行うための最も効果的な方法は何ですか?IE 9以下の場合、これは機能します。

<!--[if IE]>
<script type="text/javascript">
window.location = "/IEblocked.html";
</script>
<![endif]-->

ベストプラクティスのJavaScriptソリューションがあると仮定すると、どのような落とし穴を見つけることができますか?次の問題が発生する可能性があるのではないかと思います。

  • イベントの発生順序
  • iframe私のコントロールを超えている要素
  • <script>他のタグのコンテキストでのJSソリューションの優先順位
  • document.write('<script type="text/javascript" src="foo.js"></script>');メソッドを介してロードされたスクリプト。

多くの人が「Modernizrを使用してください」「あなたはクレイジーですか、そのようにDOMにスクリプトを入れないでください!」と叫ばざるを得ないかもしれないと感じています。、残念ながら、アプリケーションは大きく、一部の拡張機能は現時点では範囲外です。

4

3 に答える 3

16

ええと、IEはクライアント側のVBScriptをサポートする唯一のブラウザです。

したがって、これをページに追加するだけです:(もちろん、IEblocked.html自体を除く)

<script type="text/vbscript">
Document.Location = "IEblocked.html"
</script>

私はそれがIE9以下で動作しているという事実を知っています。このコメントは、IE10でも問題なく機能していることをほぼ証明しています。将来的には、Eric Lippertによるこのブログ投稿に出くわしました。VBScriptの死の噂は非常に誇張されており、次の段落が含まれています。

近い将来、VBScriptとJScriptを引き続きサポートします。明らかに、VBScript、JScript、WSHなどは、既存のビジネスクリティカルなコードの膨大な量がそれらに依存しているため、オペレーティングシステムに永久に付属し続ける必要があります。それを「ゆっくりとした死を遂げる」と特徴づけることは、過度にメロドラマ的です。アンマネージドCOMスクリプト言語は、何年にもわたって有用であり続けると期待しています。Visual Studio Sustaining Engineering Teamは現在、VBScript、JScript、Windows Scriptコンポーネント、WindowsScriptHostなどを担当しています。

8年以上前に投稿されましたが、WindowsのコアにはまだVBScriptが長年存在しており、InternetExplorerの将来のバージョンでは引き続き使用されると確信しています。

要約すると、私はEricに直接連絡し、「Internet Explorerバージョンでクライアント側の言語としてVBScriptがサポートされる期間はどれくらいですか?」と尋ねました。それに応えて、彼は言った:

ブラウザでVBScriptに依存している企業クライアントはまだたくさんあるので、MSFTはそのサポートをやめるのはばかげているでしょう。サポートは非​​常に安価であり、少数の顧客の善意を失うことは高額です。

彼はもうマイクロソフトで働いていないので、彼の答えは公式ではありませんが、私が得ることができる最も近いものであり、何年も前のブログ投稿ではなく、ソースから直接です。すべてを考慮すると、上記のコードを使用することは、今後何年にもわたって機能すると結論付けることができます。:)

于 2013-02-04T15:59:25.953 に答える
5

あなたのクライアントはナッツです。しかし、彼らがこれをするためにお金を払っているなら、それなら....まあ、何でも。

jQueryを使用している場合は、ブラウザー検出機能を提供します。非推奨であるため、最新バージョンの使用を避けたい場合がありますが、機能します。

if ($.browser.msie) { ....do crazy stuff here.... }

jQueryを使用していない場合、または非推奨の機能を使用したくない場合は、次の方法で実行できます。

  • ユーザーエージェント文字列の解析:

    if(!!navigator.userAgent.match(/MSIE/)) { .... do crazy stuff .... }
    
  • Javascript条件付きコメントの使用(これはまだサポートされていると思います):

    if(Function('/*@cc_on return document.documentMode > 0@*/')()){ .... do crazy stuff .... }
    

お役に立てば幸いです。

于 2013-02-04T15:56:59.770 に答える
0

今後の参考のために、ここにJavaScriptでのすべての検出があります

<script type="text/javascript">

// if I am opera I need to not enter this function
if (!!(window.opera && window.opera.version)) {
    // ok now am I IE (opera is the only other browser that will do this
    if (document.all) {
        // Now lets look at the versions, use the ones you want

        // ie 5
        if (!(document.compatMode != undefined)) {
            // do ie 5 thing
        }
        else if ((document.compatMode != undefined) && (window.XMLHttpRequest == undefined)) {
            // do ie 6 thing
        }
        else if ((document.XMLHttpRequest != undefined) && (document.querySelector == undefined)) {
            // do ie 7 thing
        }
        else if ((document.querySelector != undefined) && (document.addEventListener == undefined)) {
            // do ie 8 thing
        }
        else if ((document.addEventListener != undefined) && (window.atob == undefined)) {
            // do ie 9 thing
        }
        else if (window.atob) {
            // do ie 10+ thing
        }
        else {
            // do ie 4 thing
        }
    }
}

于 2013-02-06T21:41:30.600 に答える