使用JS检测自定义协议是否存在

之前在《自定义通用URL协议实现在浏览器中打开本机任意程序》介绍了通过自定义协议使的浏览器可以调起客户端本地程序的方法,在企业环境的实际应用中,又面临着如何检测自定义的协议是否存在的问题,ie下可以通过activex检测注册表项,chrome该怎么办呢?有没有通用的解决办法呢?答案是肯定的,甚至有人已经将该功能封装成了通用JS。具体如下。

  • 访问 github,下载 protocolcheck.js 。引用该js后,即可使用以下代码检测

    1
    window.protocolCheck(href,callback)
  • 示例代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <!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
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $(function () {
    $("div[href]").click(function (event) {
    window.protocolCheck($(this).attr("href"),
    function () {
    alert("协议未注册");
    });
    event.preventDefault ? event.preventDefault() : event.returnValue = false;
    });
    });
  • 运行效果

    点击第一个a标签时,提示协议未注册,点击第二个a标签时,正常打开了记事本程序。

  • END