gpt4 book ai didi

javascript - 区分 IE10 桌面版和 metro

转载 作者:行者123 更新时间:2023-11-29 20:05:22 24 4
gpt4 key购买 nike

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

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

这是否足以检测 Metro 与 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 风格中得到相同的结果吗?这是否有助于确定是否在 metro 中运行?

如果这不正确,无法区分它们,那么如何在 IE10 桌面中完全模仿 Metro 风格?我如何完全禁用 activeX,以便它会给我与 metro Ie10 相同的结果?

谢谢,塔尔

最佳答案

在网上搜索确定我的 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,我遵循许多人建议的平台字符串...结合 CPU,因为 MS Surface 运行 ARM。最后是两点:ActiveX 和分辨率...

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

如果 MS 实现了一个简单的属性来判断触摸与否以及桌面还是 metro ,我会很高兴......但他们没有。

希望我的代码对您有所帮助?

关于javascript - 区分 IE10 桌面版和 metro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12236867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com