区分IE10桌面和地铁

时间:2012-09-02 14:46:59

标签: javascript microsoft-metro activex internet-explorer-10

我想检测用户何时使用Metro vs Desktop IE10。

我在网上搜索了很多,我发现如果用户在IE10 Metro风格或桌面风格中运行,则没有100%的方法可以找到(使用代码)。 然后我找到了一些网站,其中有一个avascript检测activeX。

这是否足以检测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风格?我如何完全禁用activeX所以它会给我与metro Ie10相同的结果?

谢谢, 塔尔

3 个答案:

答案 0 :(得分: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和(但这不是必需的)如果至少有两个“接触点”可用。由于我的脚本在触摸和鼠标版本之间会有所不同,我需要进行此项检查 - 您可以将其删除。

但是由于IE10也支持msPointerEnabled,我跟随平台字符串一样,因为很多人建议......当MS Surface运行ARM时,与CPU结合使用。最后两点:ActiveX和分辨率......

但不幸的是,即使所有这些要点都可以使用具有触控功能的台式机/笔记本电脑进行模拟,如果你想......嗯,到目前为止,你的桌面IE10很难获得,但并非不可能。

我会喜欢它,如果MS会实现一个简单的属性,告诉你是否触摸,桌面或地铁......但他们没有。

希望我的代码可以帮到你?

答案 1 :(得分:0)

IE10 metro和IE10桌面版本的功能几乎相同(IE10桌面支持插件,IE10地铁不支持)。 如果您希望用户使用桌面版并且他们使用的是Metro版本,最好的方法是指导他们使用桌面版。 考虑到用户处于IE10地铁版本并且您希望他使用IE10桌面版的情况,他可以在导航栏中点击2次打开桌面版....这将是最好的方法opening IE10 desktop version from IE10 metro version

答案 2 :(得分:0)

继TomažŠčavničar的回答之后,如果这有帮助,您似乎可以强制用户使用桌面版本。

这篇SO帖子有更多信息:

Forcing IE10 in UI/Metro to switch to desktop mode