URL Protocol(自定义协议)可以让web页面调用本地exe程序,这个神奇的功能是怎么实现的呢?

URL Protocol
URL Protocol,没错就是标题里所说的自定义协议。这玩意儿大家最常见的比如迅雷、电驴等。我们平时在电影天堂下载电影的时候点击链接浏览器会启动本地迅雷进行下载。

下面是某部电影的下载链接浏览器检查元素后

<a href="thunder://QUFmdHA6Ly95Z2R5ODp5Z2R5OEB5ZzQ1Lm..."/>

这里的"thunder"就是url protocol。

chrome打开一个IE
往注册表注册

下面我们通过在chrome上打开一个IE,来演示用法

首先创建一个test.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\openIE]

@="URL:openIE Protocol"

"URL Protocol"=""

[HKEY_CLASSES_ROOT\openIE\DefaultIcon]

[HKEY_CLASSES_ROOT\openIE\shell]

[HKEY_CLASSES_ROOT\openIE\shell\open]

[HKEY_CLASSES_ROOT\openIE\shell\open\command]

@="cmd /c set m=%1 & call set m=%%m:openIE:=%% & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%% & exit"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
点击test.reg,在弹出框中选择是

Windows Registry Editor Version 5.00是注册表工具的版本信息,必须放在首行或文件开头的位置。
HKEY_CLASSES_ROOT下面添加一个openIE树,其中openIE的名称就对应着自定义URL Protocol的名称,在web中调用的时候需要这个名称;
@=“URL:openIE Protocol” 可以是任意字符串,在触发时产生提示信息

如果配置为空"",或直接不配置,则会提示

4.@="cmd /c set m=%1 & call set m=%%m:openIE:=%% & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%% & exit"
cmd:表示以cmd命令行调用ie,瞬间会有黑色的命令行框出现。

call:批处理语法,和start命令都可以用在这个地方。
形式为

set m=%%m:openIE:=%% : 应该是从后面页面处截取参数信息。比如
取得的值是http://a.com.cn。

C:\\Program Files\\Internet Explorer\\iexplore.exe: IE的安装路径。

%1 :表示携带的参数;后面在html触发时,会传递url给ie,否则,ie会仅打开空白页。

这个参数等价于在ie快捷方式 目标后添加一个url,那么默认页就是这个url。

exit :类似bat批处理中的exit语法,退出cmd。但是如果不加该参数,那么会重复打开一个IE并关闭,造成死循环效果,不知道是何原因。

上面代码貌似可以直接配置成
C:\Program Files\Internet Explorer\iexplore.exe “%1” exit
但是目前出的问题是%1这个参数没生效,老是打开空白页,有待研究。

HTML测试

手动创建一个test.html文件

<html>
<head>
<script type="text/javascript">
function clickRadio() {
window.location.href = "openIE:http://a.com.cn";
}
</script>
</head>

<body>
<input type="button" onclick="clickRadio()" value="Click button" />

</body>

</html>
————————————————
版权声明:本文为CSDN博主「云川之下」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_45406092/article/details/105227147

【web】自定义协议Protocol URL的更多相关文章

  1. Web自定义协议,BS端启动CS端,

    实例 1.准备CS项目,windows窗体应用程序,拖进来一个label控件来接受BS的参数,并显示,右击生成,复制该文件的bin目录下的exe,例如放在以下路径,例如C:\\simu\\下, 2.编 ...

  2. Google Chrome 自定义协议(PROTOCOL)问题的处理

    最近在使用谷歌浏览器的时候遇到了自定义协议(PROTOCOL)的问题,比较折腾,特此记录,希望我浪费生命换来的结果能够帮助读到此文的朋友少浪费一点宝贵的时间! 由于某些原因,电脑里一直没有安装阿里旺旺 ...

  3. 【Win10 UWP】URI Scheme(二):自定义协议的处理和适用场景

    上一篇提到Windows Store协议的使用,其实Windows Store协议仅是系统内建的一种协议规则.我们也可以自己定义一套规范的URI-Scheme,除了可以给其他App调用外,本应用也可以 ...

  4. 采用自定义协议代替OCX组件

    事情起源:公司视频播放一直是采用的嵌入浏览器组件实现视频的预览回放等功能.这种实现方式要求客户使用IE浏览器. 最近上线项目使用Html 5开发,要求IE11.项目中使用了视频播放功能,如果全部升级到 ...

  5. 使用浏览器自定义协议启动本地程序(.EXE文件)

    比如,自定义协议名称为 myapp,要启动的本地程序为 myapp.exe. 1)首先向注册表添加如下内容: Windows Registry Editor Version 5.00 [HKEY_CL ...

  6. C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  7. 【转】C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  8. http协议与url简介(转)

    一 知识简介 HTTP:(Hypertext transfer protocol)超文本传输协议,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议. URL ...

  9. 通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  10. 【转载】Chrome使用自定义协议打开本地程序并运行IE打开网页

    部分内容转载自: http://blog.sina.com.cn/s/blog_e2b8213a0102wqby.html 项目中遇到某需求:chorme要运行IE并打开网页.解决方案之一就是通过自定 ...

随机推荐

  1. 活动开启 | 以梦筑码 · 不负韶华 开发者故事征集令,讲出你的故事,有机会参加HDC.Together 2023

      HarmonyOS面世以来,经历了3大版本迭代,系统能力逐步完善,生态加速繁荣.一路前行,是开发者们点亮漫天星光.点滴贡献,聚沙成塔,开发者们正用代码改变世界. 是梦想,激励我们一路前行.在黎明到 ...

  2. 重新点亮linux 命令树————文件权限和目录权限[九]

    前言 简单整理一下文件权限和目录权限. 正文 当打开ls -al的时候会出现相关的权限信息. 那么上面文件类型包括: 普通文件 d 目录文件 b 块特殊文件 (设备,比如u盘) c 字符特殊文件 (终 ...

  3. CTFshow命令执行29-123

    命令执行 WEB29 eval是php中执行以PHP脚本执行的命令 PHP命令可以执行脚本命令 本题使用方法是先 system(cp f*.php 1.txt) 然后访问1.txt WEB30 在PH ...

  4. python实现:有一个列表为num_list,找到一个具有最大和的连续子列表,返回其最大和。

    # 有一个列表为num_list,找到一个具有最大和的连续子列表,返回其最大和.# 示例:# 输入: [-3,1,-1,6,-1,2,4,-5,4]# 输出: 11# 解释: 连续子数组 [6,-1, ...

  5. python3中os.renames()和os.rename()区别

    renames源码:def renames(old, new): head, tail = path.split(new) # 作用是分割为两部分,head为路径,tail为文件名: if head ...

  6. 力扣1077(MySQL)-项目员工Ⅲ(中等)

    题目: 写 一个 SQL 查询语句,报告在每一个项目中经验最丰富的雇员是谁.如果出现经验年数相同的情况,请报告所有具有最大经验年数的员工. 查询结果格式在以下示例中: employee_id 为 1 ...

  7. 力扣554(java&python)-砖墙(中等)

    题目: 你的面前有一堵矩形的.由 n 行砖块组成的砖墙.这些砖块高度相同(也就是一个单位高)但是宽度不同.每一行砖块的宽度之和相等. 你现在要画一条 自顶向下 的.穿过 最少 砖块的垂线.如果你画的线 ...

  8. KubeVela 插件指南:轻松扩展你的平台专属能力

    简介: 本文将会全方位介绍 KubeVela 插件的核心机制,教你如何编写一个自定义插件.在最后,我们将展示最终用户使用插件的体验,以及插件将如何融入到 KubeVela 平台,为用户提供一致的体验. ...

  9. 基于 Flink CDC 实现海量数据的实时同步和转换

    简介: 徐榜江在 5.21 Flink CDC Meetup 的分享. 摘要:本文整理自 Apache Flink Committer,Flink CDC Maintainer,阿里巴巴高级开发工程师 ...

  10. 阿里巴巴云原生混部系统 Koordinator 正式开源

    ​简介: 脱胎于阿里巴巴内部,经过多年双 11 打磨,每年为公司节省数十亿的混部系统 Koordinator 今天宣布正式开源.通过开源,我们希望将更好的混部能力.调度能力开放到整个行业,帮助企业客户 ...