0

変数を直接定義すると機能します。次のコードのように、body の背景色は IE では薄緑、IE 以外のブラウザでは水色になります。

<html>
<body>
    <script>
        if (window.attachEvent) {
            var YourBrowserIsIE = true;
        }

        if (YourBrowserIsIE) {
            document.body.style.backgroundColor = 'lightgreen';
        }
        else {
            document.body.style.backgroundColor = 'lightblue';
        }
    </script>
</body>
</html>


ただし、次のように eval() を使用して変数を定義する必要がある場合もありますが、YourBrowserIsIEIE 以外のブラウザーでは未定義であるというエラーが結果に表示されます。

if (window.attachEvent) {
    eval('var YourBrowserIsIE = true;');
}


はい、var YourBrowserIsIE = false;IE 以外のブラウザー用に事前定義したり、if ステートメントを に変更したりできることはわかってif (typeof YourBrowserIsIE != 'undefined')いますが、コードはできるだけ最小限に抑えたいと考えています。

if (YourBrowserIsIE)eval() を使用して変数を定義し、 IE 以外のブラウザでエラーを表示せずに簡単に変数をチェックするソリューションはありますか?


==編集==

わかりづらくてすみません。上記の eval() を使用する状況は、実際には IE のバージョンを検出するためのものです。次のコードを参照してください。

<html>
<body>
    <script>
        if (window.attachEvent) {
            var version = /msie (\d+)/i.exec(navigator.userAgent)[1];
            eval('var YourBrowserIsIE' + version + ' = true;');
        }

        if (YourBrowserIsIE9) {
            document.body.style.backgroundColor = 'lightgreen';
        }
        else {
            document.body.style.backgroundColor = 'lightblue';
        }
    </script>
</body>
</html>
4

4 に答える 4

4

しかし、コードをできるだけ最小限に抑えたい

それならそうじゃないwindow.YourBrowserIsIE = window.attachEvent;

2 つの利点があります。

  1. 最小限です
  2. それは必要ありませんeval

あなたのコードを見て、私はまったく使用YourBrowserIsIEしないことをお勧めしますが、使用します:

document.body.style.backgroundColor = window.attachEvent 
                                       ? 'lightgreen' : 'lightblue';

そして、あなたの編集を見ると、それは次のようになる可能性があります:

document.body.style.backgroundColor = 
              +((/msie (\d+)/i.exec(navigator.userAgent)||[0])[1]) === 9 
                ? 'lightgreen' : 'lightblue'; 

そして、それが再利用可能な変数でなければならない場合、私はソリューション 1 に戻ります。

window['YourBrowserIsIE'+((/msie (\d+)/i.exec(navigator.userAgent)||[0])[1]] 
       = true;
document.body.style.backgroundColor = window.YourBrowserIsIE9 ?
                                       ? 'lightgreen' : 'lightblue';
于 2012-09-03T05:13:52.517 に答える