-1

ユーザー登録用のフォームがあるページがあります。<!--[if IE]> ... <![endif]-->IEでのみ表示するためにラップしました。また、対応するエラーが他のブラウザに表示されます: <![if !IE]>...<![endif]>.

しかし、これは IE 10 では完全には機能しません。次のように、java-script を使用して IE 10 を判別できます。

<script type="text/javascript">
    var pattern = /MSIE\s([\d]+)/;
    var ua = navigator.userAgent;
    var matched = ua.match(pattern);
    if (matched) {
        alert("IE 10");
    }
</script>

しかし、IE7+ で使用する html ブロッ​​クにバインドするにはどうすればよいですか?

更新しました

COM オブジェクトであるため、IE の使用を要求する IX509 Windows インターフェイスを使用する必要があります (よくわかりませんが、ActiveX を使用しているようです)。そうしないと、IX509 を使用するとページに奇妙なエラーが表示されます。

4

3 に答える 3

3

ActiveX のサポートについては、ActiveXObject が JS に存在することを確認してください。

if(typeof window.ActiveXObject != "undefined")

またはより具体的には:

if(typeof window.ActiveXObject == "function")

スクリプトでスコープが問題ではなく、変数が不要であると確信している場合はwindow.、変数はもちろんオブジェクトから自動的に取得されるwindowため、コードを次のように短縮できます。

if(typeof ActiveXObject != "undefined")

ただし、潜在的な結果を理解した上でのみ使用する必要があります

于 2013-10-15T14:56:10.937 に答える
1

ブラウザ検出ではなく、機能検出を使用します。

次の簡単なコード行を使用して、ブラウザーが ActiveX をサポートしているかどうかを検出できます。

if(typeof window.ActiveXObject != "undefined") { ..... }

なんで?

  1. ブラウザの検出は脆弱です。新しいバージョンの IE は検出コードによって検出されず、サイトが壊れる可能性があります。実際、これはまさにここで起こったことです。また、IE11 でも同じ問題が発生する可能性があります。上記の機能検出スクリプトは、すべてのブラウザーとすべてのバージョンで正しく機能します。

  2. すべての IE インストールで ActiveX が利用できるわけではありません。IE を検出し、それが ActiveX をサポートしていると想定すると、それを持っていないサイトに対してサイトがひどく機能しなくなります。繰り返しますが、代わりに機能検出を使用すると、この問題を回避できます。

于 2013-10-15T15:04:08.613 に答える
0

最初に試したアプローチを改善しました。

まず、エラーページは次のようにラップされます<div>:

<div id="not_ie" style="display:none">

IEフォームもラップされてい<div>ます:

<div id="ie" style="display:none">

また、次の js は、ブラウザーの種類に応じてフォームまたはエラーを表示します。

<script type="text/javascript">
    var pattern = /MSIE\s([\d]+)/;
    var ua = navigator.userAgent;
    var matched = ua.match(pattern);
    if (matched) {
        var elem = document.getElementById("ie");
        elem.style.display = "inline";
    } else {
        var elem = document.getElementById("not_ie");
        elem.style.display = "inline";
    }
</script>

条件付きコメントを使用したり、ActiveX や IE のバージョン固有の機能を判断したりする必要はありません。

于 2013-10-15T15:39:12.857 に答える