背景
有这样一个项目:通过单点登录集成WEB类应用,通过统一入口方式实现应用的集中访问,效果见图
但因存在多开发厂商、集成项目建设时间差异等原因,出现浏览器差异化需求,如:行文办公,因使用插件需通过ActivitiX进行加载,必须使用IE;新上线的应用,因使用的框架比较新,对低版本IE不兼容,而需要使用Chrome或火狐这样的现代浏览器,林林总总。
虽说只有考虑不到的设计没有碰不到的需求,客户说要支持,只能上啊,乙方得有乙方的承担(一万个草泥马)。
解决思路
这种需要判断主机环境(只考虑面向windows
用户,为什么?没有人在Linux
或者MAC
上用ActivitiX
插件啊)是否安装浏览器还能调启浏览器的,第一想法肯定是浏览器插件,但每种浏览器都得开发插件,想想都快崩溃,有没有其他办法呢?
某度完全不知道你搜索的是什么,还得靠Google
了
大概两种方法:
- 使用JS控制打开某浏览器,再进行跳转(感觉心里没底,还得设置浏览器安全等级一堆,试了下放弃)
- 使用协议扩展,定制注册表,控制打开浏览器
说得有点多_ 还是show代码吧
定制注册表,保存为.reg
后缀的文件并执行:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\chrome2]
"URL Protocol"="\"\""
@="\"URL:chrome2 Protocol\""
[HKEY_CURRENT_USER\Software\Classes\chrome2\DefaultIcon]
@="\"chrome.exe,1\""
[HKEY_CURRENT_USER\Software\Classes\chrome2\shell]
[HKEY_CURRENT_USER\Software\Classes\chrome2\shell\open]
[HKEY_CURRENT_USER\Software\Classes\chrome2\shell\open\command]
@="cmd /k set myvar=%1 & call set myvar=%%myvar:chrome2:=%% & call start chrome %%myvar%% & exit /B"
大致就是做个钩子,在使用专用协议 chrome2
时 使用chrome浏览器打开,使用ie
协议的链接使用IE打开,类似代码就不贴了
测试代码:
<a href="ie:http://www.baidu.com">用IE打开</a>
<br>
<a href="chrome2:http://www.baidu.com/">用chrome打开</a>
点击用IE打开(弹出框有点丑)
后续
添加判断客户端是否已安装指定浏览器,让丑陋的弹窗口不丑陋
参考资料
通过脚本检测是否安装浏览器
https://stackoverflow.com/questions/35778489/need-vbscript-to-open-url-links-in-webpages-in-chrome-browser-not-ie
使用私有协议从IE打开chrome
https://stackoverflow.com/questions/40531374/open-internet-explorer-from-chrome-using-a-protocol-handler-ieurl