需求:
在Chrome浏览器中点击链接,打开IE浏览器,跳转到指定页面并传递参数
解决方案:
一些应用软件可以通过点击URL链接启动并执行操作(例如迅雷),这是如何做到的呢? 主要是通过修改注册表,注册URL Protocol。
阶段一:点击链接,打开IE浏览器,并传递单个参数
- 新建 openIE.reg
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\openIE]
@="URL: openIE Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\openIE\DefaultIcon]
@="iexplore.exe,1"
[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%%"
注释:
set m=%1(%1为传递过来的参数,将其赋给变量m)
set m=%%m:openIE:=%% (将前缀openIE: 清除)
“C:\Program Files\InternetExplorer\iexplore.exe” %%m%% (打开IE
浏览器并跳转到指定页面)
- 测试链接:
<a href="openIE://www.baidu.com?a=1" />test
- 运行结果: 打开IE浏览器并传递参数a成功!
阶段二:传递多个参数
- 测试链接:
<a href="openIE://www.baidu.com?a=1&b=2" />test
- 运行结果: 参数b传递失败!
- 解决过程: 修改openIE.reg
[HKEY_CLASSES_ROOT\openIE\shell\open\command]
@="cmd /c set m=%1 & echo 1的值:%1 & call echo m的值:%%m%% & call set m=%%m:openIE:=%% & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%% & exit"
-
运行结果: 参数b传递依然失败!
-
原因分析:
set m=%1,
此处%1会直接替换成openIE://www.baidu.com?a=1&b=2,&符号将之分为两个命令,m=openIE://www.baidu.com?a=1和b=2
看来特殊符号&是无法直接传递了,于是想到了用自定义的分隔字符串separator来替代&符号,并在传递给IE前,将其替换回&符号。
- 解决过程: 修改openIE.reg
[HKEY_CLASSES_ROOT\openIE\shell\open\command]
@="cmd /c set m=%1 & call set m=%%m:openIE:=%% & call set m=\"%%m:separator=&%%\" & call \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" %%m%%"
- 测试链接:
<a href="openIE://www.baidu.com?a=1separatorb=2" />test
- 运行效果: 参数b传递成功!
本以为可以功成身退了,却发现个诡异的现象。
第一次点击测试链接OK,不关闭IE的情况下再次点击链接,新弹出的IE地址有误,效果如下:
地址栏变为了:http://%22//www.baidu.com/?a=1&b=2%20%20"
- 解决过程: 修改openIE.reg
[HKEY_CLASSES_ROOT\openIE\shell\open\command]
@="cmd /c set m=%1 & call set m=%%m:openIE:=%% & 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\openIE目录下新建openIE.bat
@echo off
set m=%m:openIE:=%
set m="%m:separator=&%"
start "" "C:\\Program Files\\Internet Explorer\\iexplore.exe" %m%
exit
- 解决过程: 修改openIE.reg
[HKEY_CLASSES_ROOT\openIE\shell\open\command]
@="cmd /c set m=%1 & \"C:\\Program Files\\openIE\\openIE.bat\" %%m%% & exit"
- 运行结果: 多次点击测试链接均成功!(效果图略)
阶段三:方便用户操作
新建runreg.bat
,自动注册协议(不知道为啥不太好用)
REGEDIT /S openIE.reg
通过WinRAR将openIE.reg、openIE.bat、runreg.bat打包成exe文件
解压路径需与openIE.reg中一致
解压后自动运行runreg.bat,写入注册表信息
静默执行
重要!!!三个文件夹总结!!!
1.openIE.reg
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\openIE]
@="URL:openIEProtocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\openIE\DefaultIcon]
@="iexplore.exe,1"
[HKEY_CLASSES_ROOT\openIE\shell]
[HKEY_CLASSES_ROOT\openIE\shell\open]
[HKEY_CLASSES_ROOT\openIE\shell\open\command]
@="cmd /c set m=%1 & \"C:\\Program Files\\openIE\\openIE.bat\" %%m%% & exit"
2.openIE.bat
@echo off
set m=%m:openIE:=%
set m="%m:separator=&%"
start "" "C:\\Program Files\\Internet Explorer\\iexplore.exe" %m%
exit
3.runref.bat
REGEDIT /openIE.reg
到此就可以正常使用了,其实还可以进一步优化(想试的可以试试)
阶段四:链接中直接使用&符号
解决过程:
1.修改openIE.bat
@echo off
set m=%1%
set m=%m:openIE:=%
start "" "C:\\Program Files\\Internet Explorer\\iexplore.exe" %m%
exit
2.修改openIE.reg,将参数%1用双引号引起来
[HKEY_CLASSES_ROOT\openIE\shell\open\command]
@="\"C:\\Program Files\\openIE\\openIE.bat\" \"%1\""
测试链接:
<a href="openIE://www.baidu.com?a=1&b=2" />test
测试成功!
注:如果想要跳转到旧版的IE的话要去:Internet选项”→“高级”→“浏览”→取消勾选“启用第三方浏览器扩展*”才能避免自动跳到到edge浏览器。