在Chrome浏览器中点击链接打开IE访问网址


一些比较早的系统可能还需要IE8访问,因为相关插件配置等无法使用Chrome等浏览器打开,新开发的系统可能基于各种框架,不会再兼容IE8,所以有时候,部分功能需要在Chrome里点击链接,跳转到IE浏览器进行处理展示

遇到这个问题的时候,我想到了编写一个小软件,开机自启,并监听一个本地端口,浏览器点击时发送HTTP请求给软件,软件帮忙调用本地IE访问网页,但是这种方式较为繁琐,且需要自己实现,底层级语言编写开发效率低,高级别语言实现安装包又很大,搜索后找到一种修改注册表的方式,来实现这个功能

来自参考链接里的答案是这样的:

HKEY_CLASSES_ROOT
    alert
        (Default) = "URL:Alert Protocol"
        URL Protocol = ""
        DefaultIcon
            (Default) = "iexplore.exe,1"
        shell
            open
                command
                    (Default) = cmd /v /k set "myvar=%1" & set myvar=!myvar:alert:=! & start "" /B "!ProgramFiles!\Internet Explorer\iexplore.exe" !myvar! & exit

看起来是修改注册表的内容,尝试按照它的结构来修改注册表

regedit

修改后,在网页可以这样使用

<a href="alert:https://www.baidu.com">open ie in chrome</a>

点击后是这样的效果

Chrome:

regedit

Firefox: regedit

因为是手动修改的,所以我想着应该写个小工具来修改,不然人工修改注册表不仅危险而且效率低

正打算写的时候,偶然发现注册表是可以导出的...

alert 上右键,导出,会保存为 文件名.reg 文件,双击文件注册表,它会进行一个安全提示,点击确定即可将之前修改的内容写入注册表

感觉上比自己编写工具靠谱,因为是M$自己的导入导出,首先兼容性很好,其次自己写的程序修改注册表可能会被杀软阻止

.reg 内容:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\alert]
@="ABC 1.0系统"
"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 /v /k set \"myvar=%1\" & set myvar=!myvar:alert:=! & start \"\" /B \"!ProgramFiles!\\Internet Explorer\\iexplore.exe\" !myvar! & exit"

最后就是如何让用户来运行这个reg了,在页面上添加一些逻辑即可,如果用户首次访问网站,提示用户“检测到IE浏览器异常,部分功能不可用,请根据提示修复”,点击后下载“修复IE跳转.reg”,安装运行后,用户点击“已运行修复”,写入个Flag到浏览器缓存,下次启动就不需要提示用户了

参考: stackoverflow: launch-ie-from-a-link-in-chrome