浏览器调用本地exe(应用程序)方法

1. 使用场景:

需要在浏览器中调用调用客户端本地的EXE或其他可执行文件, 可以带参数。类似于下载时浏览器调用迅雷或者百度云盘。

2. 准备工作

使用Python准备一个测试用的exe

  1. mytest.py, 此文件接收参数并弹出提示框
import sys
from tkinter import messagebox

def mmain(args:list):
    if len(args) > 0:
        messagebox.showinfo("提示", "您的参数为:{}".format(args))
    else:
        messagebox.showinfo("提示", "您一个参数都没有。。。")

if __name__ == '__main__':
    # print(sys.argv)
    mmain(sys.argv[1:])
  1. 打包为exe
pyinstaller -F mytest.py
  1. 得到mytest.exe,后续将尝试用浏览器调取此exe

3. 开始操作

  1. 编写注册表文件test.reg 向系统添加一个类似于http的私有协议(仅本地有效),然后浏览器调用。编写注册表文件如下:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\test]
"URL Protocol"="F:\\test\\protocol\\dist\\mytest.exe"
@="testProtocol"
[HKEY_CLASSES_ROOT\test\DefaultIcon]
@="F:\\test\\protocol\\dist\\mytest.exe"
[HKEY_CLASSES_ROOT\test\shell]
[HKEY_CLASSES_ROOT\test\shell\open]
[HKEY_CLASSES_ROOT\test\shell\open\command]
@="\"F:\\test\\protocol\\dist\\mytest.exe\" %1"

注意

  1. test为自定义协议,不一致时需要全部替换
  2. 注意\转义部分
  1. 双击运行此文件,可能会被安全软件阻止,放行即可,成功后会提示注册表添加成功
  2. 测试。在浏览器地址栏执行 test:// 调用改程序,成功调用即可
  3. 在web页面中调用同http协议的调用,如
<!-- a标签调用 (123是参数) -->
<a href="test://123">点击调用本地exe</a>
<button onclick="toTestExe()">点我也行</button>

<script>
    // 方法调用
    function toTestExe() {
        window.location.href = 'test://123'
    }
</script>

其他:浏览器调用时先判断是否存在exe

如果需要提前判断本地是否有目标exe(即是否存在自定义协议), 可以使用custom-protocol-detectionjs 来做判断

完整代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>浏览器调用exe</title>
</head>
<script src="./js/protocolcheck.js"></script>

<body>

    <a href="test://123">点击调用本地exe</a>
    <div id="aa" class="test" data-href="aaaaa://123">不存在的协议</div>
    <div id="test" class="test" data-href="test://123">存在的协议</div>
    <button onclick="toTestExe()">点我也行</button>

    <script>
        // 监听点击
        document.addEventListener('click', event => {
            if (event.srcElement.dataset.href) {
                // window.protocolCheck(p1,p2, p3) p1:自定义本地协议 p2 不存在执行方法  p3 存在的方法
                window.protocolCheck(
                    // 当前点击的协议
                    event.srcElement.dataset.href,
                    // 协议不存在,提示  可以在这里提示先下载等
                    () => alert("XXX不能存在。。。"),
                    // 协议存在则直接跳转, 不用处理, 默认自动跳转
                    // () => {alert("能行!");}
                );
            }

        })

        // 方法调用, 直接跳转
        function toTestExe() {
            window.location.href = 'test://123'
        }
    </script>
</body>

</html>

注意
通过测试发现exe接收到的参数为 test://123, 需要跟客户端定义好参数,打好配合

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值