2013-12-26 5 views
0

Я знаю, что Modernizr не имеет встроенного теста для ActiveX и обнаружения поддержки ActiveX для IE получает complicated после IE11 (см. Код обнаружения версии Silverlight).Как я могу обнаружить поддержку ActiveX?

Есть ли обходной путь для обнаружения ActiveX для поддержки всех версий IE и других браузеров? Также я должен контролировать эту серверную сторону, и Request.Browser.ActiveXControls возвращает false в IE11 (This issue has been reported Microsoft).

+0

Предположим, вы не можете использовать ActiveX. Потому что, если вы этого не сделаете, вы будете использовать только IE-функцию, которая в любом случае является невероятно плохим. – ThiefMaster

+0

Я знаю это, и я хочу избавиться от ActiveX, но я должен использовать его некоторое время ... – ogun

ответ

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

* «вы можете получить к нему доступ через сервер» * - uhhhh ?! – ThiefMaster

+0

Я знаю, что это плохая идея, но если вы сохраните ее возвращаемое значение в скрытом поле, то вы можете получить к нему доступ, правильно? – ogun

+0

Только если вы отправляете его с помощью формы или AJAX ... – ThiefMaster

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.

+0

typeof window.ActiveXObject возвращает «undefined» в ActiveX с поддержкой IE11 и Chrome, который не поддерживает ActiveX. – ogun

+0

Я не думаю, что IE11 поддерживает ActiveX вообще ... – ThiefMaster

+2

Он поддерживает. Я запускаю ActiveX на IE11. Если вы хотите прочитать: http://blogs.msdn.com/b/b8/archive/2011/09/14/metro-style-browsing-and-plug-in-free-html5.aspx – ogun

-1

Если все остальное терпит неудачу, Вы можете возвратиться к примерки поймать блока:

try { 
    var x = new ActiveXObject("..."); 
    // this particular ActiveX Control is supported 
} 
catch (error) { 
    // it's not supported 
} 
+0

Если я использую это метод, я должен проверить spesific ActiveX control. – ogun

+0

Не совсем. Просто проверьте активный элемент управления x, который обычно поддерживается. Если он генерирует исключение, установите глобальную переменную в значение false. Если исключение не выбрано, установите для глобального флага значение true. –

+0

спасибо! Я использовал ваш блок try-catch, и я написал общий метод. Я добавлю это как aswer. пожалуйста, проверь это. – ogun

Смежные вопросы