JS实现 浏览器判断本地是否安装程序,并下载与启动 Chrome,IE,360可用


场景需求:

最近工程的一个需求,用户点击链接:

  • 软件已经存在,则打开软件
  • 软件未安装,则提示用户下载;

问题可以拆分成两部分:

  • 判断软件是否存在,未安装时会提示用户安装;

这里写图片描述

  • 已安装软件,则点击打开软件;

这里写图片描述


超链接打开本地程序

<a href="glcloud://"></a>
<a href="mailto://evanxuhe@163.com:"></a>

点击即可启动本地软件,很神奇,找到软件注册表的信息,写入根目录名称即可打开,蛋疼的是该方法没返回值,软件不存在不会有任何反应,无法作为判断依据。


检测软件是否存在;

这部分才是难点,最简单的办法是使用navigator.plugins去检查对应的dll是否加载。但是在各大浏览器全面拒绝npapi之后,之前通过npapi加载本地dll插件的方法基本都不能用了,360浏览器极速内核支持可用。找了好久,参考了各路方式和StackOverflow的解法,在MIT大牛的基础上找到的解决方案:

StackOverFlow解决方案:
https://stackoverflow.com/questions/27489665/approaches-of-detection-of-custom-protocol-in-chrome-and-safari-browsers
Custom Protocol Detection in Browser源码:
https://github.com/ismailhabib/custom-protocol-detection


IE系列:
Win7 IE
<script>
        function findPlugins(){
        var shell = new ActiveXObject("WScript.shell");
        var reg=shell.RegRead("HKEY_CLASSES_ROOT\\glcloud\\URL Protocol");
}
</script>

更正一下,网上好多错的,是HKEY_CLASSES_ROOT\glcloud\URL Protocol
不是HKEY_LOCAL_MACHINE\SOFTWARE\Classes\glcloud\shell\open\command
command里没有任何可执行属性


Win8,Win10 IE

IE自带API判断
navigator.msLaunchUri(uri)


Chrome:

这个实现比较巧妙。当软件存在,点击链接会打开软件,鼠标跳出。因而创建一个SetTimeOut任务,当3s内鼠标仍未跳出,说明软件不存在。
navigator.plugins只能载入native client(nacl)、chrome PDF等几个组件,不支持npapi


360极速浏览器:

可以使用navigator.plugins载入所有插件(包括npapi),也可以同chrome使用相同解法

<script>
            function findPlugins(){
                var plugins = navigator.plugins;
                for (var i = 0; i <plugins.length; i++) {
                    var plugin_name=plugins[i].name;
                    console.log(plugin_name);
                    if (plugin_name=="Access Client") {
                        alert(plugin_name+"   已找到");
                        break;}}
}
</script>

火狐:

火狐在软件不存在时也会弹出选择框,目前还未解决欢迎大家贡献才智

最后附上本人的源码地址:

https://github.com/evanxuhe/Native-App-Protocal-Detection

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值