admin管理员组文章数量:1619183
1. 使用场景:
需要在浏览器中调用调用客户端本地的EXE或其他可执行文件, 可以带参数。类似于下载时浏览器调用迅雷或者百度云盘。
2. 准备工作
使用Python准备一个测试用的exe
- 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:])
- 打包为exe
pyinstaller -F mytest.py
- 得到mytest.exe,后续将尝试用浏览器调取此exe
3. 开始操作
- 编写注册表文件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"
注意
- test为自定义协议,不一致时需要全部替换
- 注意
\
转义部分
- 双击运行此文件,可能会被安全软件阻止,放行即可,成功后会提示注册表添加成功
- 测试。在浏览器地址栏执行
test://
调用改程序,成功调用即可 - 在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, 需要跟客户端定义好参数,打好配合
版权声明:本文标题:浏览器调用本地exe(应用程序)方法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728790546a1173640.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论