使用JS检测自定义协议是否存在
【该博客是拼接他人的,原因我们这边PC的开发人员问我,有没有关于js某个对象直接能检测手机或者电脑的自定义协议的,我上网搜了下,貌似移动端的解决比较多】
最终解决方案:还是需要github上面大神写的方法:protocolcheck
https://www.lefer.cn/posts/34578/
之前在《自定义通用URL协议实现在浏览器中打开本机任意程序》介绍了通过自定义协议使的浏览器可以调起客户端本地程序的方法,在企业环境的实际应用中,又面临着如何检测自定义的协议是否存在的问题,ie下可以通过activex检测注册表项,chrome该怎么办呢?有没有通用的解决办法呢?答案是肯定的,甚至有人已经将该功能封装成了通用JS。具体如下。
-
访问 github,下载 protocolcheck.js 。引用该js后,即可使用以下代码检测
window.protocolCheck(href,callback)
示例代码
-
example.html
。ff
协议是自定义通用URL协议实现在浏览器中打开本机任意程序文中示例的协议。你可以替换成任意存在的协议。
<!DOCTYPE html> <html> <head lang="zh"> <meta charset="UTF-8"> <title>自定义协议探测</title> </head> <body> <h1>Click one of these labels:</h1> <div href="unexists:randomstuff">一个不存在的协议</div> <div href="ff://C:/Windows/System32/notepad.exe">一个存在的协议</div> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> <script src="protocolcheck.js"></script> <script src="example.js"></script> </body> </html>
exampe.js
-
$(function () { $("div[href]").click(function (event) { window.protocolCheck($(this).attr("href"), function () { alert("协议未注册"); }); event.preventDefault ? event.preventDefault() : event.returnValue = false; }); });
运行效果
-
点击第一个
a
标签时,提示协议未注册,点击第二个a
标签时,正常打开了记事本程序。 -
END