是否有可能检测是否从Web应用程序安装了Microsoft Excel

我正在开发一个Web应用程序(ASP.NET),它具有一些需要在客户端上安装Microsoft Excel的function。 如果Excel不存在,我想禁用这些function。

Windows / IE / Excel只有解决scheme是好的。 这不是一个多浏览器,多操作系统的Web应用程序。

任何聪明的JavaScript在那里做到这一点?

没有。

你不能深入到客户端机器深处去弄清楚那个部分。 你可以做的最好是假设它已经被安装,并且思考如果没有,或者只是询问用户。

你可以做这样的事情,但你会得到各种安全警告:

<script> var excelInstalled; try { var excel = new ActiveXObject("Excel.Application"); excelInstalled = true; } catch(e) { excelInstalled = false; } alert("excelInstalled: " + excelInstalled); </script> 

为什么Excel? 如果我有OpenOffice.org呢?

只是警告用户你要发送给他们,用“Excel文件”标记链接,让他决定。

 function hasOfficePlugin() { var toCheckExt = ['', '12', '13', '14', '15'], i, n, mt; for (i = 0, n = toCheckExt.length; i < n; i++) { mt = navigator.mimeTypes['application/x-msoffice' + toCheckExt[i]]; if (mt && mt.enabledPlugin && mt.enabledPlugin.name) { return true; } } return false; } 

我已经使用Office 11(2003)和Office 12(2007)testing了上述内容,并且在Firefox,Safari,Chrome和Opera中似乎都很好。 尽pipe它在IE中不起作用,因为IE中的navigator.mimeTypes对象总是空的。

它正在检查MS Office插件的存在。 我不太了解这个插件 – 很可能它并不总是安装在办公室……但是我认为,如果上述情况是正确的,那么安装Excel是一个相当强烈的信号。 当然,它可能是有限的使用,因为它不工作在IE中,但也许你可以做一些事情…

您无法使用标准技术访问Web浏览器上下文以外的客户端信息。 但我看到的答案之一是使用一些ActivX对象来检测Excel。 无论如何这些技术只适用于Windows上的Internet Explorer。 那么Mac呢? 其他浏览器如歌剧或Firefox或铬在Windows上呢? 我想最好让用户告诉你这个。 只要询问用户是否已经安装了excel:

 var isExcel = window.confirm('dear user if you have Microsoft Excel installed please click on ok, otherwise click on cancel. thank you.'); 

开始时这是个坏主意。 你想做什么 – 重新考虑。

如果你仍然坚持:

尝试克隆ActiveXObject为Excel,然后为OpenOffice。 如果失败,redirect到NoExcel.html或发送XMLRequest到服务器。
另外,您可以尝试通过JavaScritp找出是否存在XLS文件扩展名处理程序。 最后,你可以安装你的ActiveX来检查是否安装了Excel。

这是用于窗户的。 没有想法的Mac,Linux的,移动…你可以打赌,任何方式,使其工作将停止与下一个修补程序的工作。