需求:

在Chrome浏览器中点击链接,打开IE浏览器,跳转到指定页面并传递参数

过程:
一些应用软件可以通过点击URL链接启动并执行操作(例如迅雷),这是如何做到的呢?
主要是通过修改注册表,注册URL Protocol。
 
阶段一:点击链接,打开IE浏览器,并传递单个参数
 
新建alert.reg
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\alert]
@="URL:Alert Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\alert\DefaultIcon]
@="iexplore.exe,1"
[HKEY_CLASSES_ROOT\alert\shell]
[HKEY_CLASSES_ROOT\alert\shell\open]
[HKEY_CLASSES_ROOT\alert\shell\open\command]
@="cmd /c set m=%1 & call set m=%%m:alert:=%% & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%%"
注释:
set m=%1(%1为传递过来的参数,将其赋给变量m)
set m=%%m:alert:=%%(将前缀alert:清除)
"C:\\Program Files\\InternetExplorer\\iexplore.exe" %%m%%(打开IE浏览器并跳转到指定页面)
测试链接:
<a href="alert://www.baidu.com?a=1" />test
运行效果:
 
打开IE浏览器并传递参数a成功!
阶段二:传递多个参数
测试链接:
<a href="alert://www.baidu.com?a=1&b=2" />test

运行效果:
 

参数b传递失败

修改alert.reg

[HKEY_CLASSES_ROOT\alert\shell\open\command]@="cmd /c set m=%1 & echo 1的值:%1 & call echo m的值:%%m%% & call set m=%%m:alert:=%% & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%% & exit"

运行效果:

 
 
原因分析:
set m=%1,此处%1会直接替换成alert://www.baidu.com?a=1&b=2,&符号将之分为两个命令,m=alert://www.baidu.com?a=1和b=2

看来特殊符号&是无法直接传递了,于是想到了用自定义的分隔字符串separator来替代&符号,并在传递给IE前,将其替换回&符号。

修改alert.reg

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@="cmd /c set m=%1 & call set m=%%m:alert:=%% & call set m=\"%%m:separator=&%%\" & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%%"

测试链接:

<a href="alert://www.baidu.com?a=1separatorb=2" />test

运行效果:

 

参数b传递成功!

本以为可以功成身退了,却发现个诡异的现象。
第一次点击测试链接OK,不关闭IE的情况下再次点击链接,新弹出的IE地址有误,效果如下:

 

地址栏变为了:http://%22//www.baidu.com/?a=1&b=2%20%20"

修改alert.reg

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@="cmd /c set m=%1 & call set m=%%m:alert:=%% & call echo 第一次替换:%%m%% & call set m=\"%%m:separator=&%%\" & call echo 第二次替换:%%m%% & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%%"

运行效果:

 

原因分析:
执行m=\"%%m:separator=&%%\"后,m的值变为了"//www.baidu.com/?a=1&b=2  "
看来问题出在双引号上,但因为包含特殊字符&,此处必需使用双引号。
尝试各种写法未果,后经培高人指点,将具体的操作写到bat文件中,在此处调用该bat。

在C:\Program Files\WisoftAlert目录下新建alert.bat

@echo off
set m=%m:alert:=%
set m="%m:separator=&%"
start "" "C:\\Program Files\\Internet Explorer\\iexplore.exe" %m%
exit

修改alert.reg

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@="cmd /c set m=%1 & \"C:\\Program Files\\WisoftAlert\\alert.bat\" %%m%% & exit"

多次点击测试链接均成功!(效果图略)

阶段三:方便用户操作
新建runreg.bat,自动注册协议

REGEDIT /S alert.reg

通过WinRAR将alert.reg,alert.bat,runreg.bat打包成exe文件

 
 
解压路径需与alert.reg中一致

解压后自动运行runreg.bat,写入注册表信息

静默执行

阶段四:链接中直接使用&符号
修改alert.reg,将参数%1用双引号引起来

[HKEY_CLASSES_ROOT\alert\shell\open\command]
@="\"C:\\Program Files\\WisoftAlert\\alert.bat\" \"%1\""

修改alert.bat

@echo off
set m=%1%
set m=%m:alert:=%
start "" "C:\\Program Files\\Internet Explorer\\iexplore.exe" %m%
exit

测试链接:

<a href="alert://www.baidu.com?a=1&b=2" />test

测试成功!

在Chrome浏览器中点击链接,打开IE浏览器,跳转到指定页面并传递参数的更多相关文章

  1. android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据

    为了实现这个功能可折腾了我好久,先上一份代码,经楼主验证是绝对可以用的而且也比较清晰的代码!(ps:还是先剧透下吧,第三方大部分浏览器无法成功.) 点击浏览器中的URL链接,启动特定的App. 首先做 ...

  2. 怎么在android实现通过浏览器点击链接打开apk

    intent://scan/#Intent;scheme=appname://appname/[频道]/[id];package=com.appname.package;end http://m.ch ...

  3. 浏览器中点击链接,跳转qq添加好友的实现方式

    做android三年了,都不知道到底干了啥,现在好好研究应该来得及,哈哈哈,希望看到文章的人共勉,哈哈哈(新手写文章,大佬轻喷,呜呜呜~) 好了,这篇只是记录下,项目中遇到的坑(MMP测试),哈哈哈, ...

  4. Android编程实现点击链接打开APP功能示例

    本文实例讲述了Android编程实现点击链接打开APP功能.分享给大家供大家参考,具体如下: 在Android中点击链接打开APP是一个很常见的需求.例如,电商为用户发送优惠券之后经常会下发一条短信: ...

  5. iOS点击推送消息跳到应用指定页面

    现在的推送用的越来越频繁,几乎每个应用都开始用到了.其实又有几个用户会去看推送消息呢?没办法,产品经理最大啊,只是苦了我们这一帮程序员啊!闲话少说,进入正题.兄弟我用的是极光推送,自然是以极光推送为例 ...

  6. 阻止iOS Web APP中点击链接跳转到Safari 浏览器新标签页

    问题:ios封装完之后,点击里边的按钮会跳转到网页上 ——小卡遇到这个问题就是这样解决的↓↓↓ 解决方法:建议将代码放到</head>标签前,当然,另外存为一个js 文件引用也是可以的呦~ ...

  7. django xadmin中logout页面在chrome浏览器中点击关闭页面无效

    问题现象 django xadmin中logout页面在chrome浏览器中点击关闭页面无效,无法关闭相应的页面 问题原因 高版本的chrome等浏览器不支持在window.colse()的写法 问题 ...

  8. QQ和微信点击链接或扫描自动跳转外部浏览器

    微信上进行的网页宣传.游戏传播.APP下载各类活动很多,但是各位朋友肯定经常会遇到一些特殊需求,网页需要在手机默认浏览器打开而不是微信内置浏览器.这个问题怎么解决呢? 另一种情况是你的网址被恶意举报被 ...

  9. 解决默写浏览器中点击input输入框时,placeholder的值不消失的方法

    html中,placeholder作为input的一个属性,起到了在输入框中占位并提示的作用. 但是有一些浏览器,如chrome,当鼠标点击输入框时,placeholder的值不消失,只有输入数据才消 ...

随机推荐

  1. 不吹不黑,赞一下应用运维管理的cassacdra

    不吹不黑的为菊厂的应用运维管理AOM点个赞.Why? 某菊厂应用运维管理工具AOM每天处理着亿级条数据,这么多数据是怎么存储的呢? 说到数据存储就会想到关系型数据库,比如mysql,oracle,sy ...

  2. Iedis - Redis 在IDEA中的可视化工具破解

    2.如何破解 // 如果你没有改动IDEA的话,IDEA的插件库在这个目录下C:\Users\Administrator\.IntelliJIdea2017.3\config\plugins\Iedi ...

  3. 数据库分库分表策略之MS-SQL读写分离方案

    MS-SQL读写分离将从以下知识点进行展开: 以下截图内容来自博主:https://www.cnblogs.com/echosong/p/3603270.html 1.本地发布(写库如:centerd ...

  4. 怎样通过html标签名获取元素节点集合

    方法1. 使用document.querySelectorAll(); 方法2. 使用document.getElementsByTagName(); document.querySelectorAl ...

  5. 基于MFC对话框的2048游戏

    在之前一篇<简单数字拼板游戏学习>基础上修改,地址:http://www.cnblogs.com/fwst/p/3706483.html 开发环境:Windows 7/ Visual St ...

  6. Springboot+mybatis+druid 配置多数据源

    项目结构 application.yml配置文件 spring: application: name: service datasource: primary: jdbc-url: jdbc:orac ...

  7. javaIO——StringReader & StringWriter

    上一篇概述篇说过,一个IO对象是指一个可以被关闭的数据源或者目标,那么StringReader和StringWriter就是一个字符串源和字符串目标. 1. StringtReader: 文档说:St ...

  8. LeetCode:178.分数排名

    题目链接:https://leetcode-cn.com/problems/rank-scores/ 题目 编写一个 SQL 查询来实现分数排名.如果两个分数相同,则两个分数排名(Rank)相同.请注 ...

  9. c#调用存储过程实现批量增加和修改数据

    1 例如当我在编辑表格数据,一次编辑了多行需要保存到数据库时,就需要判断数据库中是否已经存在,存在则修改,不存在则新增一条或多条数据,即所谓批量增加或者跟新数据. 首先需要构建数据包,把要添加或者跟新 ...

  10. TensorFlow C++接口编译和使用

    部分内容from: Tensorflow C++ 从训练到部署(1):环境搭建 在之前的编译中,已经编译好了tensorflow_pkg相关的wheel.现在有一个需求,需要按照C++的代码进行模型加 ...