当前位置: 首页 > ds >正文

Web调用本地程序:Custom URL Scheme

在一些业务场景中,我们希望通过浏览器直接调用本地程序,例如点击按钮启动远程桌面客户端、打开调试工具、拉起企业内部应用。由于浏览器出于安全考虑不能随意执行本地程序,常见的解决方法之一就是 自定义 URL 协议(Custom URL Scheme)


一、核心思路

自定义协议就是给操作系统注册一个类似 myapp:// 的 URL 前缀,当浏览器访问该协议时,系统会调用我们指定的本地应用,并将 URL 作为参数传入。

示例:

myapp://open?file=test.txt

会触发系统调用我们的程序,并把 myapp://open?file=test.txt当成一个字符串参数传进去。


二、Windows 平台实现

在 Windows 中,我们可以通过 注册表 注册自定义协议。步骤如下:

1. 新建 .reg 文件

在任意文件夹下新建一个文本文件,命名为 myapp.reg,内容如下:

Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\myapp]
@="MyApp Protocol"
"URL Protocol"=""[HKEY_CLASSES_ROOT\myapp\DefaultIcon]
@="C:\\Program Files\\MyApp\\myapp.exe,1"[HKEY_CLASSES_ROOT\myapp\shell][HKEY_CLASSES_ROOT\myapp\shell\open][HKEY_CLASSES_ROOT\myapp\shell\open\command]
@="\"C:\\Program Files\\MyApp\\myapp.exe\" \"%1\""
  • HKEY_CLASSES_ROOT\myapp → 定义了协议名 myapp://

  • URL Protocol → 告诉系统这是一个 URL 协议。

  • DefaultIcon → 设置协议对应的图标(可选)。

  • command → 当调用 myapp://xxxx 时,实际执行的命令,这里是 C:\Program Files\MyApp\myapp.exe,并把整个 URL 作为参数 %1 传入。

2. 导入注册表

双击 myapp.reg 文件,点击 是(Y)确定,即可完成注册。

完成后,浏览器访问 myapp:// 就会自动启动 myapp.exe


三、Linux 平台实现

在 Linux 桌面环境(GNOME/KDE)中,可以通过 .desktop 文件注册协议。

例如在 /usr/share/applications/myapp.desktop 中添加:

[Desktop Entry]
Name=MyApp
Exec=/usr/local/bin/myapp %u
Type=Application
MimeType=x-scheme-handler/myapp;

然后执行:

xdg-mime default myapp.desktop x-scheme-handler/myapp
update-desktop-database /usr/share/applications

此后,浏览器访问 myapp://的uri就会调用 /usr/local/bin/myapp

注意: update-desktop-database 只处理~/.local/share/applications//usr/share/applications/下的.desktop文件,放在其他路径下无效

可验证操作:

#查询对应协议对应的应用程序

xdg-mime query default x-scheme-handler/myapp

# 测试是否能启动
xdg-open "myapp://open?file=test.txt"


四、验证

不能直接在浏览器地址栏输入 myapp:// 进行测试,大多数现代浏览器会拦截。

正确的验证方式是通过 HTML 页面触发:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>自定义协议测试</title></head><body><a href="myapp://open?file=test.txt">启动 MyApp</a><script>// 也可以用 JS 触发function launchApp() {window.location.href = "myapp://open?file=test.txt";}</script><button onclick="launchApp()">通过按钮启动 MyApp</button></body>
</html>

在浏览器里打开该页面,点击 链接按钮,系统会提示是否允许打开外部应用,确认后会执行你注册的程序。


五、总结

  • Windows:通过注册表实现;

  • Linux:通过 .desktop 文件和 xdg-mime 实现;

  • 验证方法:需要在 HTML 链接或 JS 脚本 中调用,而不是直接在地址栏输入。

自定义协议方案简单高效,适合只需要 启动本地程序并传参 的场景,是在 Web 与本地应用之间打通的最常见方式。

http://www.xdnf.cn/news/18957.html

相关文章:

  • Zookeeper(分布式RPC调用和分布式文件储存)
  • 2025年渗透测试面试题总结-35(题目+回答)
  • Radan钣金CAM解决方案在电气柜制造行业的应用案例
  • 物流配送路径规划项目方案
  • 【Doris】服务器配置
  • 深入浅出 ArrayList:从基础用法到底层原理的全面解析(下)
  • IDEA2022开启新版UI
  • 【嵌入式电机控制#进阶4】无感控制(二):观测器导论锁相环(全网最通俗易懂)
  • 【C++11】auto关键字:自动类型推导
  • MCP之weather server demo
  • 李沐-第十章-训练Seq2SeqAttentionDecoder报错
  • Leetcode top100之链表排序
  • 【ElasticSearch】json查询语法
  • 美团一面“保持好奇”
  • Spring Boot 项目打包成可执行程序
  • HTML应用指南:利用POST请求获取全国三星门店位置信息
  • Ubuntu安装及配置Git(Ubuntu install and config Git Tools)
  • Next.js 15.5.0:探索 Turbopack Beta、稳定的 Node.js 中间件和 TypeScript 的改进
  • 30.throw抛异常
  • 【图像算法 - 23】工业应用:基于深度学习YOLO12与OpenCV的仪器仪表智能识别系统
  • 【P2P】P2P主要技术及RELAY服务1:python实现
  • Kubernetes 构建高可用、高性能 Redis 集群
  • 线性回归入门:从原理到实战的完整指南
  • k8sday17安全机制
  • 真实应急响应案例记录
  • 一键终结Win更新烦恼!你从未见过如此强大的更新暂停工具!
  • PNP机器人介绍:全球知名具身智能/AI机器人实验室介绍之多伦多大学机器人研究所
  • PC端逆向会用到的常见伪指令
  • 解读 “货位清则标识明,标识明则管理成” 的实践价值
  • 灰狼算法+四模型对比!GWO-CNN-BiLSTM-Attention系列四模型多变量时序预测