我正在开发一个需要在客户端安装Microsoft Excel的Web应用程序(ASP.NET),其中一些功能需要使用Excel。如果没有Excel,我想禁用这些功能。
Windows / IE / Excel的解决方案是可行的。这不是一个多浏览器,多操作系统的Web应用程序。
是否有任何聪明的JavaScript可以实现这一点?
我正在开发一个需要在客户端安装Microsoft Excel的Web应用程序(ASP.NET),其中一些功能需要使用Excel。如果没有Excel,我想禁用这些功能。
Windows / IE / Excel的解决方案是可行的。这不是一个多浏览器,多操作系统的Web应用程序。
是否有任何聪明的JavaScript可以实现这一点?
不行。
您无法深入客户端机器,以便找出该部分。您能做的最好的事情就是要么假设它已经安装,并且认真考虑如果没有安装会发生什么,要么直接询问用户。
<script>
var excelInstalled;
try
{
var excel = new ActiveXObject("Excel.Application");
excelInstalled = true;
}
catch(e)
{
excelInstalled = false;
}
alert("excelInstalled: " + excelInstalled);
</script>
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)上进行了测试,并且在Firefox,Safari,Chrome和Opera中运行良好。但是它在IE中不起作用,因为IE中的navigator.mimeTypes对象始终为空。
它正在检查MS Office插件的存在。我对这个插件不太了解 - 很可能它并不总是与office一起安装...但是我认为,如果以上返回true,则表明Excel已安装,这是一个相当强的信号。当然,由于它在IE中不起作用,所以可能有限,但也许您可以利用它做些什么...
使用标准技术,您无法在 Web 浏览器上下文之外访问客户端信息。但我看到有一个答案使用了一些 ActivX 对象来检测 Excel。不管怎样,这些技术只适用于 Windows 上的 Internet Explorer。那么 Mac 呢?Windows 上的其他浏览器如 Opera、Firefox 或 Chrome 呢?我认为最好让用户告诉您这个信息。只需询问用户是否已安装 Excel:
var isExcel = window.confirm('dear user if you have Microsoft Excel installed please click on ok, otherwise click on cancel. thank you.');
这是一个不好的想法。无论你试图做什么,都要重新考虑一下。
如果你还是坚持:
尝试为Excel和OpenOffice创建ActiveXObject。如果失败了,请重定向到NoExcel.html或向服务器发送XMLRequest。
此外,您可以尝试通过JavaScript查找是否有XLS文件扩展名处理程序。
最后,您可以安装自己的ActiveX,检查是否安装了Excel。
这是针对Windows的。对于Mac、Linux、移动设备等没有想法... 你可以打赌,任何让它运作的方式都会在下一个热修补之后停止工作。