如何检测客户端浏览器是否启用了ActiveX?

19

如何检测客户端浏览器中是否启用了ActiveX?

我尝试了以下代码,但在Firefox中无法工作。

window.ActiveXObject not working in Firefox

有什么想法吗?

在这里检查示例: http://jsfiddle.net/qXSvQ/2/

当我运行这个示例时,我得到false

4个回答

26

ActiveX对象只存在于Internet Explorer中。如果您想要使用它们进行XMLHTTP请求,请改用XMLHTTPRequest()对象,使用特性检测。

if ("ActiveXObject" in window) { /* Do ActiveX Stuff */ }
else { /* ActiveX doesnt exist, use something else */ }

这在IE11和Chrome中运行良好,不像window.ActiveXObject(它总是返回“undefined”)。 - Drkawashima

9
什么出了问题?在火狐浏览器中是否会抛出错误?还有其他浏览器呢?
var hasAX = "ActiveXObject" in window;

不,我从这里得到的是在Firefox和Chrome中都为false。请参见http://jsfiddle.net/qXSvQ/2/。 - twesh
5
@twesh应该在Firefox和Chrome中返回false;因为Firefox和Chrome都不支持ActiveX。你正在运行代码以确定FireFox或Chrome是否支持ActiveX。由于Firefox和Chrome都不支持ActiveX,所以函数应该返回false。在FireFox和Chrome中测试实际代码,它正确地返回了false。答案中是否有遗漏的内容? - Ian Boyd

8

以下代码应该可以运行,在IE6和FF 3.6.12至少可以运行。

if(typeof(window.ActiveXObject)=="undefined"){
    alert("ActiveX Object not supported");
}else {
    alert("ActiveX Object  supported");
}

它在IE中运行良好,但在Firefox中未定义。我已经检查了FF 3.6.12和FF 4.0b7。 - twesh
有没有任何解决方法可以检查Firefox浏览器中是否启用了ActiveX? - twesh
7
@twesh - Firefox永远不支持ActiveX。正如Chinmayee所说,Firefox将始终返回undefined。如果你期望FF支持其他内容,也许你指的不是ActiveX? - Andrzej Doyle
@AndrzejDoyle 他可能在想 Chrome/Netscape/Firefox 使用的二进制插件系统。所有浏览器都有二进制插件系统。在 Internet Explorer 中,它们很容易安装并称为 ActiveX。在其他浏览器中,它们被称为 NPAPI 插件。了解用户代理是否支持 NPAPI 对于显示用户下载链接(例如 maps.google.com 和 Google Earth NPAPI 插件)会很有用。但最终,问题是关于 ActiveX 而不是 NPAPI,所以这是正确的答案。 - Ian Boyd
根据这个IE浏览器的ActiveX设置,它不支持ActiveX,即使我可以在窗口元素中看到window.ActiveXObject属性,我仍然会坚持@MPD的答案,因为它显示了正确的值。 - Juan Carlos Alpizar Chinchilla
显示剩余4条评论

1

看起来Firefox会简单地跳过包含ActiveX对象的脚本:

<script><!--
  var activeXsupport = "ActiveX not supported";
// --></script>

<script><!--
  var dummy = new ActiveXObject ('WScript.Shell');
  activeXsupport = "ActiveX supported";
// --></script>

<script><!--
  alert (activeXsupport);
// --></script>    

这使得在IE11上显示“支持”,而在Firefox上显示“不支持”。

[编辑:]由于如果使用[F12]打开控制台,它还会在Firefox上抛出错误消息,因此我建议进行以下改进:

<script><!--   
  var dummy = ''; var hasActiveX = false;  
  try {dummy = new ActiveXObject ('WScript.Shell'); hasActiveX = true;}
  catch (err) {dummy = ''; hasActiveX = false;}
  alert ('hasActiveX = ' + hasActiveX);
// --></script>   

如果将Edge Chromium设置为默认浏览器并启用“更多工具”中的Internet Explorer模式重新加载,则支持ActiveX:

edge://settings/defaultBrowser 

Gerolf


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接