如何用JS判断本地是否安装了某个应用程序

应用程序是个exe,用.net winForm写的,目前已实现通过注册表URL Protocol实现在浏览器点击按钮后启动,但是无法判断本地是否有这个应用程序,如果没有,就会没有反应,现在需求是要有提示,所以得先判断是否存在,像QQ或者迅雷那样,调用客户端时,先校验本地是否已安装了客户端。

    研究了一下QQ客服的机制,其实电脑里把QQ卸载了,点击咨询客服,他也并没有检测本地是否安装了QQ,自然不会提示,js里是有个IsInstallQQ()方法,看起来像检测本地是否安装了QQ,其实并没有调用,如果没有安装QQ,点击确认打开QQ与腾讯客服对话? 后是没有任何反应或者提示的,我从GitHub上找到了个通过延迟判断浏览器是否失去焦点的方法来判断本地应用程序是否启动了,参考:[](https://github.com/ismailhabib/custom-protocol-detection ""),可以参考一下

参考:https://blog.csdn.net/llso9001/article/details/77165199
用IE浏览器自带的ActiveX控件 或者 通过协议 打开, 要配合你app的注册表使用

不谈借助于activex之类的插件,js肯定是判断不了的。但是,你可以反向思维,就是说让你的本地程序去修改UA,或者本身作为浏览器插件工作,向你的网页的hidden填表,然后js/服务器端判断
如果ua有相关特征,或者有表单数据,那么就视作存在本地程序,如果没有就提示没有安装。

第一步:让exe程序连接一下服务器,服务器记录下IP
第二步:然后JS向后台提交一个空表单,后台获取一下IP
如果IP对应上了就说明有程序
在第一步时,程序还可以向服务器发送版本号等信息
到第二步时,JS提交后台比对,这样还可以做更新