2

ユーザーが Metro vs Desktop IE10 で作業しているときを検出したいと思います。

私は Web をかなり検索しましたが、ユーザーが IE10 Metro スタイルまたはデスクトップ スタイルで実行しているかどうかを (コードを使用して) 100% 確認する方法はないという結論に達しました。次に、activeXを検出するavascriptを含むサイトを見つけました。

これは、Metro vs Desktop を検出するのに十分でしょうか?

コードは次のとおりです。

    <html>
<body>
<script type="text/javascript">
var myActiveX = null;
var isActiveXCapable = false;

function InitMyActiveX() {

  try {
    new ActiveXObject("");
  }
  catch (e) {
    // FF has ReferenceError here
    if (e.name == 'TypeError' || e.name == 'Error') {
      isActiveXCapable = true;
    }
  }
  try {
    myActiveX = new ActiveXObject("My.ActiveX");
  }
  catch (e) {
    myActiveX = null;
  }

  if (myActiveX != null) {
    document.getElementById("myInfo").innerHTML = myActiveX.GetSomeInfo();
  } else {

    document.getElementById("CallMyActiveX").setAttribute("disabled", "disabled");

    if (!isActiveXCapable) {
      document.getElementById("myInfo").innerHTML = "Browser does not support ActiveX";
    } else {
      document.getElementById("myInfo").innerHTML = "MyActiveX is not installed";
    }
  }
}

function DoSomething() {
InitMyActiveX();
  if (myActiveX != null) {
    var s = myActiveX.DoSomething();
    document.getElementById("myResult").innerHTML = s;
  }

}
</script>

<div id="myInfo"></div>
<input type="button" id="CallMyActiveX" value="Call me" onclick="DoSomething()"  />
<div id="myResult"></div>
</body>
</html>

IE10 デスクトップで単純に実行すると、「MyActiveX がインストールされていません」と表示されます。Firefox では、「MyActiveX がインストールされていません」と表示されます。IE10 Metro スタイルでも同じ結果が得られますか? これはメトロで実行されているかどうかを調べるのに役立ちますか?

これが正しくなく、それらを区別する方法がない場合は、IE10 デスクトップで Metro スタイルを完全に模倣するにはどうすればよいですか? メトロ Ie10 と同じ結果が得られるように、activeX を完全に無効にするにはどうすればよいですか?

ありがとう、タル

4

3 に答える 3

3

IE10がデスクトップバージョンとMetroバージョンのどちらで実行されているかを判断するための解決策を求めてウェブをクロールした後、最終的に次の機能にまとめました。

function checkForIE10MetroStyle() {
var result = false;
if (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints >= 2) {
    var platF = navigator.platform;
    var cpu = navigator.cpuClass;

    if (platF.toLowerCase() == 'win64' || cpu.toLowerCase() == 'arm') {
        // both potential platforms found - now search deeper
        try {
            // IE10 Metro does not support ActiveX
            new ActiveXObject("htmlfile");
        } catch (e) {
            // finally check for fullscreen-mode
            result = (window.innerWidth == screen.width && window.innerHeight == screen.height);
        }
    }
}

return result;

}

残念ながら、100%確実であるという正確な可能性はありません...しかし、最初にmsPointerEnabledをチェックし、少なくとも2つの「タッチポイント」が使用可能かどうかをチェックします(ただし、これは必須ではありません)。私のスクリプトはタッチバージョンとマウスバージョンで異なるため、このチェックが必要です。これを省略してもかまいません。

しかし、IE10はmsPointerEnabledもサポートしているので、多くの人が示唆しているように、プラットフォーム文字列に従います...MSSurfaceがARMを実行するときにCPUと組み合わせます。そして最後に2つのポイント:ActiveXと解像度...

しかし、残念ながら、これらすべてのポイントでさえ、必要に応じてタッチ対応のデスクトップ/ノートブックPCでシミュレートできます...まあ、これまでのところデスクトップIE10を入手するのは難しいですが、不可能ではありません。

MSがタッチかどうか、デスクトップかメトロかを示す単純なプロパティを実装していれば、私はそれが好きだったでしょう...しかし、そうではありませんでした。

私のコードがお役に立てば幸いです。

于 2013-02-25T08:52:44.593 に答える
0

IE10 メトロと IE10 デスクトップ バージョンの機能はほぼ同じです (IE10 デスクトップはプラグインをサポートし、IE10 メトロはサポートしません)。ユーザーにデスクトップ バージョンを使用してもらいたいがメトロ バージョンを使用している場合は、デスクトップ バージョンを使用するように指示するのが最善の方法です。ユーザーが IE10 メトロ バージョンを使用していて、IE10 デスクトップ バージョンを使用したい状況を考えると、ナビゲーション バーを 2 回クリックするだけでデスクトップ バージョンを開くことができます。これが最適な方法です。IE10 メトロ バージョンから IE10 デスクトップ バージョンを開く

于 2013-05-02T21:17:41.430 に答える
0

TomažŠčavničarの回答に続いて、これが役立つ場合は、ユーザーにデスクトップバージョンの使用を強制できるようです.

この SO 投稿には詳細情報があります。

UI/Metro で IE10 を強制的にデスクトップ モードに切り替える

于 2013-06-11T10:02:33.103 に答える