我知道Modernizr
没有ActiveX
的内置测试,并且在IE11之后检测IE
的ActiveX支持获取complicated(查看Silverlight版本检测码)。
是否有任何解决方法可以检测ActiveX支持所有版本的IE和其他浏览器?此外,我也必须控制此服务器端,Request.Browser.ActiveXControls
在IE11(This issue has been reported Microsoft)上返回false。
答案 0 :(得分:3)
您可以测试typeof window.ActiveXObject != 'undefined'
。
请注意,您必须检查typeof
,这是我在IE11中获得的(不再支持ActiveX):
>>> window.ActiveXObject
undefined
>>> typeof window.ActiveXObject
"undefined"
>>> typeof window.ActiveXObject === 'undefined'
true
>>> window.ActiveXObject === undefined
false
在IE10及以下版本中:
>>> typeof window.ActiveXObject
"function"
因此,检查将让您了解是否可以使用ActiveXObject(..)
创建新的ActiveX对象。
答案 1 :(得分:1)
您可以将以下脚本用于客户端,如果将其保存到元素,则可以通过服务器端访问它。
function IsActiveXSupported() {
var isSupported = false;
if(window.ActiveXObject) {
return true;
}
if("ActiveXObject" in window) {
return true;
}
try {
var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
isSupported = true;
} catch (e) {
if (e.name === "TypeError" || e.name === "Error") {
isSupported = true;
}
}
return isSupported;
}
答案 2 :(得分:0)
更新@ogun的代码:
function def( o ) { return CS.undefined !== typeof o; }
function IsActiveXSupported() {
try {
// Test if it should be supported
if ( def( window.ActiveXObject ) || ( "ActiveXObject" in window ) ) {
// Test if it is really supported
var start = performance.now();
var xmlDom = new ActiveXObject( "Microsoft.XMLDOM" );
var elapsed = performance.now() - start;
return true;
}
} catch ( e ) {
// When active X controls are possible, but disabled, an exception will be thrown.
}
return false;
}
更新的原因:如果可以使用ActiveX,但将其禁用,则将引发异常。原始代码会将其指示为“已启用”。不要重复调用此函数,因为它不是很快。在IE11,当前的Firefox和Chrome上进行了测试。 (您可以删除性能指标。)
答案 3 :(得分:-1)
如果所有其他方法都失败了,你可以回到try-catch块:
try {
var x = new ActiveXObject("...");
// this particular ActiveX Control is supported
}
catch (error) {
// it's not supported
}