需求:在新系统中添加老系统的访问链接,由于老系统基于IE浏览器开发,现代浏览器对IE平台的兼容性比较差,所以会有在Chrome页面点击按钮或链接后打开IE浏览器并跳转到对应的链接的需求。
本文所示脚本文件:openIE.zip
方案一: bat脚本
+ 注册表添加 自定义协议
- 新建
openIE.bat
脚本文件,用于启动IE浏览器并打开链接。set m=%m:openIE:=%
截取参数的前缀,例如:openIE:http://www.baidu.com
将变为http://www.baidu.com
。加openIE:
前缀是为了标识这个链接需要在IE中打开。C:\Program Files\Internet Explorer\iexplore.exe
为IE浏览器的默认路径,或者C:\Program Files (x86)\Internet Explorer\iexplore.exe
,双斜杆是为了转义,%m%
为传递的参数。
bat
@echo off
set m=%1%
set m=%m:openIE:=%
start "" "C:\\Program Files\\Internet Explorer\\iexplore.exe" %m%
exit
- 新建
openIE.reg
注册表文件,用于自定义openIE协议。command
的值为此协议触发(如点击链接)时调用的程序路径和参数。C:\Program Files\openIE\openIE.bat
为openIE.bat
脚本存放路径。
reg
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\openIE]
@="URL:openIE Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\openIE\shell]
[HKEY_CLASSES_ROOT\openIE\shell\open]
[HKEY_CLASSES_ROOT\openIE\shell\open\command]
@="\"C:\\Program Files\\openIE\\openIE.bat\" \"%1\""
-
使用管理员权限运行
openIE.reg
文件,将openIE
协议导入注册表使其生效。 -
新建
index.html
页面测试,点击链接可正常跳转IE浏览器,且参数传递正常。往后需要跳转IE的链接前加openIE:
前缀即可。
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>test</title>
</head>
<body>
<a href="openIE:http://www.baidu.com\login?a=123&b=456">openIE bat</a>
</body>
</html>
方案二: vbs脚本
+ 注册表添加 自定义协议
- 新建
openIE.vbs
脚本文件。Replace(args(0), "openIE:", "", 1, 1, 1)
同样用于截取参数的前缀。CreateObject("WScript.Shell")
用于创建WshShell
对象。shell.Run "iexplore.exe " & url, 1, False
用于启动IE浏览器并访问截取前缀后的url,注意:"iexplore.exe "
最后有个空格不可缺少。
vbs
Set args = WScript.Arguments
If args.Count > 0 Then
url = Replace(args(0), "openIE:", "", 1, 1, 1)
Set shell = CreateObject("WScript.Shell")
shell.Run "iexplore.exe " & url, 1, False
End If
- 新建
openIE.reg
注册表文件。最后一句代码含义为使用wscript来启用脚本,/B
指启用批处理模式,禁止显示所有交互式提示,C:\Program Files\openIE\openIE.vbs
为openIE.vbs
脚本存放路径,"%1%"
为传递的参数。
reg
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\openIE]
@="URL:openIE Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\openIE\shell]
[HKEY_CLASSES_ROOT\openIE\shell\open]
[HKEY_CLASSES_ROOT\openIE\shell\open\command]
@="wscript.exe //B \"C:\\Program Files\\openIE\\openIE.vbs\" \"%1\""
-
同样使用管理员权限运行
openIE.reg
文件使其协议生效。 -
同样在
index.html
页面添加测试链接,点击也可正常跳转IE浏览器,且参数传递正常。
html
<a href="openIE:http://www.baidu.com\login?x=666&y=888">openIE vbs</a>
拓展: 自动化安装脚本
新建 openIE
文件夹,将上述任意方案的 reg
和 脚本文件
放到该文件夹中,然后在该文件夹中新建 install.bat
脚本文件,下述代码以 vbs
脚本为例, bat
脚本只需替换文件后缀即可。然后以管理员身份运行 install.bat
脚本即可。 注意:要确保三个文件在同一目录!!!
bat
@echo off
setlocal enabledelayedexpansion
:: 检查管理员权限
net session >nul 2>&1
if %errorLevel% neq 0 (
echo 请以管理员权限运行!
pause
exit /b
)
:: 获取当前脚本目录
set "currPath=%~dp0"
if not exist "%currPath%" (
echo 无法获取当前所在目录!
pause
exit /b
)
:: 判断核心文件是否存在
if not exist "%currPath%openIE.vbs" (
echo openIE.vbs文件缺失!
pause
exit /b
)
if not exist "%currPath%openIE.reg" (
echo openIE.reg文件缺失!
pause
exit /b
)
:: 创建目标目录
set "targetDir=C:\Program Files\openIE"
echo 正在创建目录...
if not exist "%targetDir%" (
mkdir "%targetDir%" 2>&1 || (
echo 目录创建失败, 请检查权限或路径!
pause
exit /b
)
)
:: 复制文件
echo 正在复制文件...
copy /y "%currPath%openIE.vbs" "%targetDir%\" 2>&1 || (
echo openIE.vbs复制失败!
pause
exit /b
)
:: 导入注册表文件
set "regFile=%currPath%openIE.reg"
echo 正在导入注册表...
regedit /s "%regFile%" 2>&1 || (
echo openIE.reg导入失败!
pause
exit /b
)
:: 5. 完成提示
echo 操作成功!
pause
exit /b
总结
方案 | 优点 | 缺点 |
---|---|---|
bat脚本 | 代码简单便于理解 | 点击链接后会闪一下命令提示符窗口(cmd黑窗口) |
vbs脚本 | 点击链接后不会闪命令提示符窗口 | 代码中使用到了vbs脚本的知识,不易理解 |
上述两种方案都可实现任意浏览器跳转到IE浏览器的需求,但是点击链接后浏览器会有提示弹窗,这是系统安全策略暂时没办法达到无感知跳转,有方案的铁铁评论区写出来,感谢!!!。