扩展私有协议控制打开浏览器

背景

有这样一个项目:通过单点登录集成WEB类应用,通过统一入口方式实现应用的集中访问,效果见图

扩展私有协议控制打开浏览器_第1张图片
桌面

但因存在多开发厂商、集成项目建设时间差异等原因,出现浏览器差异化需求,如:行文办公,因使用插件需通过ActivitiX进行加载,必须使用IE;新上线的应用,因使用的框架比较新,对低版本IE不兼容,而需要使用Chrome或火狐这样的现代浏览器,林林总总。

虽说只有考虑不到的设计没有碰不到的需求,客户说要支持,只能上啊,乙方得有乙方的承担(一万个草泥马)。

解决思路

这种需要判断主机环境(只考虑面向windows用户,为什么?没有人在Linux或者MAC上用ActivitiX插件啊)是否安装浏览器还能调启浏览器的,第一想法肯定是浏览器插件,但每种浏览器都得开发插件,想想都快崩溃,有没有其他办法呢?

某度完全不知道你搜索的是什么,还得靠Google

大概两种方法:

  1. 使用JS控制打开某浏览器,再进行跳转(感觉心里没底,还得设置浏览器安全等级一堆,试了下放弃)
  2. 使用协议扩展,定制注册表,控制打开浏览器

说得有点多_ 还是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打开,类似代码就不贴了

测试代码:

用IE打开

用chrome打开

点击用IE打开(弹出框有点丑)

扩展私有协议控制打开浏览器_第2张图片
弹出

后续

添加判断客户端是否已安装指定浏览器,让丑陋的弹窗口不丑陋

参考资料

通过脚本检测是否安装浏览器
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

你可能感兴趣的:(扩展私有协议控制打开浏览器)