浏览器调用本地应用程序

第一次遇到这个问题是比较蒙的,后来查找资料后逐渐有了思路:

  1. IE 浏览器可以使用 ActiveX控件,但会有风险(我并未去验证)。
  2. 使用URL ,通过将URL协议添加到注册表的方法(我打算采用这种方法)。

那么,在使用第二种方法会面临以下问题,至少我是这样的:

  • 如何将URL协议注册到注册表?
  • 如何去查找第三方应用程序在注册表中注册的,我们能够在浏览器中调用并打开该应用程序的url协议?
  • 在无法打开第三方应用程序(用户本地未安装),如何去检验这个?这个问题我没有解决掉,我在后面给出了一篇文章,可以参考下

1. 什么是注册表

注册表是微软windows 中的一个重要的数据库,用于存储系统和应用程序的设置信息。所以,我们在更改信息表信息的时候,windows 会提醒你的操作。对于,我们现在需要解决的问题来说,注册表的知识浅尝辄止即可。


2. 如何将URL协议注册到注册表

微软的官方文档解释:https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa767914(v=vs.85)

从网上的博客来看,有两种方法来实现:

  1. 写 reg 文件,然后点击执行(脚本)

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\myprotocol]
    @="myprotocol Protocol"
    "URL Protocol"=""
    
    [HKEY_CLASSES_ROOT\myprotocol\DefaultIcon]
    @="F:\\CloudMusic\\CloudMusic\\cloudmusic.exe"
    
    [HKEY_CLASSES_ROOT\myprotocol\shell]
    @=""
    
    [HKEY_CLASSES_ROOT\myprotocol\shell\open]
    @=""
    
    [HKEY_CLASSES_ROOT\myprotocol\shell\open\command]
    @="\"F:\\CloudMusic\\CloudMusic\\cloudmusic.exe\" "
    

    拷贝以上内容,修改你想打开的本地应用程序的.exe文件的绝对路径,存入后缀为.reg的文件中,双击执行即可。(注意 \ 和 " 这些特殊字符

    以下是html 测试文件内容:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      </head>
        <body>
            <div>
                <a href="myprotocol://">
                执行可执行文件
                </a>
            </div>
        </body>
    </html>
    

    我已在 google浏览器 75.0.3770.80(正式版本)和 IE 中测试通过,成功打开本地的网易云应用程序

  2. 通过win+r ,输入regedit 打开注册表(图形界面操作)

    参考这篇博客(html启动本地.exe文件),重复的内容,请允许我偷点懒

聪明的你肯定发现第一种和第二种结果都是一样的。


3. 如何去查找第三方应用程序在注册表中注册的url协议信息

这个问题的提出是因为我们不可能操作到客户的电脑,通过上面介绍的方法将url协议注册到客户电脑上的注册表中,所以,常用的软件是不是已经提供这些注册信息了呢?这方面的文档查找,简直是无从下手;那看来只能取巧了,既然,你向注册表插入信息,那么我反向过来直接从注册表中查找吧。


通过win+r ,输入regedit 打开注册表,ctrl + F 进行查找,可以按URL Protocol (可以勾选上项和值)、DefaultIcon (可以勾选上项)、shell等进行搜索,如果搜索到的内容具有和我们自己所创建的url协议一样的层级结构(最主要的是你能从值中发现应用程序的.exe绝对路径), 那么就可以使用第二步的 html 文件测试了。

搜索特定的应用程序:

拷贝应用程序的.exe文件的绝对路径,复制到查找框,勾选上数据,注意不要勾上全字匹配


4. 在无法打开第三方应用程序(用户本地未安装),如何去检验这个

因为在我们所编写的 js 代码中就只有一个链接,即使我们能够确定我们的url是正确的,可客户端有可能没有安装,那么我们可能面临的需求是提醒客户端去安装,或者直接跳转到应用程序的下载地址。

我找到一篇关于这个问题讨论很激烈的网址,看来前辈们也是浴血奋战啊;(https://q.cnblogs.com/q/74423/)


很抱歉,这个问题我也解决不了,如果真的需要的话,可以尝试下上面文章中所提到的方式。


参考博文


在网页中执行本地exe程序的两种方式

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值