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

问题描述:

我正在开发一个Web应用程序(ASP.NET),该应用程序的某些功能需要在客户端上安装Microsoft Excel。如果Excel不存在,我想禁用这些功能。是否可以检测是否从Web应用程序安装了Microsoft Excel

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

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

+0

darn我在度假w /无法访问我的电脑。在工作中,我有Javascript代码,它会告诉你是否安装了Excel(当然只有IE)以及许多其他应用程序。你能等到1月5日吗? ;-) – scunliffe 2008-12-24 21:02:15

+0

我很想看看你有什么。所以请你回来后发布。 – 2008-12-29 14:04:41

号不允许你潜入客户机深足弄清楚那部分。您可以做的最好的方法是假定它已安装,并且仔细思考如果不是,或只是询问用户会发生什么。

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

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

谢谢。我会试试这个,我对安全警告很好奇。 – 2008-12-29 14:05:16

为什么Excel中?如果我有OpenOffice.org,该怎么办?

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

使用标准技术,您无法访问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的。 如果失败,重定向到NoExcel.html或发送XMLRequest到服务器。
此外,您可以尝试通过JavaScritp找出是否存在XLS文件扩展名处理程序。 最后,你可以安装你的ActiveX来检查是否安装了Excel。

这是用于windows的。不知道mac,linux,mobile ... 你可以打赌,任何你使它工作的方式都将停止使用下一个修补程序。

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插件。我对这个插件了解不多 - 很可能它并不总是随办公室一起安装......但我认为,如果上述内容恢复正确,那么安装Excel是一个非常强烈的信号。当然,它可能是有限的使用,因为它不工作在IE中,但也许你可以做一些事情...