如何检测ActiveX支持?

时间:2013-12-26 12:32:16

标签: c# javascript activex modernizr

我知道Modernizr没有ActiveX的内置测试,并且在IE11之后检测IE的ActiveX支持获取complicated(查看Silverlight版本检测码)。

是否有任何解决方法可以检测ActiveX支持所有版本的IE和其他浏览器?此外,我也必须控制此服务器端,Request.Browser.ActiveXControls在IE11(This issue has been reported Microsoft)上返回false。

4 个答案:

答案 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
}