這是 IE Only 網站親衛隊才有的困擾。
許多內部系統年代久遠,寫於全天下瀏覽器只有一種(IE)的時代(2004 年 IE 市佔高達 95% [參考]),寫成 IE Only 也是很合理的事。但你我都知道,時代不同了,滿天都是飛機啊,滿街都是電腦啊,HTML5 世代 IE 早已不是最好的瀏覽器選擇。望著公司那堆 IE Only 的生財工具營運系統網站,即使它們遲早要汰換,但也不是說翻就翻?有些規模數十人月的大專案,問君能有幾副肝,恰似鞭炮爆不完?
所以囉,繼續再跟 IE Only 網站和平共處十年,是每一位內部系統開發維護人員要有的心理建設。但尷尬的是-不少新網站改用 HTML5 新技術、新框架打造,JavaScript 角色日益吃重,而 IE 在這方面的效能表現明顯不如 Chrome 或 Edge,因此我們會常常明示暗示使用者改用 Chrome 開啟網頁以享受順暢的操作體驗,但一遇到要切換回還沒翻新的 IE Only 網頁功能就糗了,只能很心虛地跟使用者說「要用兩個功能記得要另外開 IE,不要直接在 Chrome 點哦,啾咪~」,想當然,使用者當場白眼都翻到後腦杓去了。
因此我常被問到「能不能從 Chrome 用 IE 開網頁?」,雖然腦中閃過幾個點子:寫個 Chrome Plugin?在使用者機器裝個常駐內應程式接收 Web API 啟動 IE?衡量部署及後續客服難度後,我的答案一直都是「辦不到」,直到這兩天… 我想到一個好點子:
原理是借用 Windows 的自訂 URI Schema 功能,我定義一個 iehttp://… URI Schema,並透過 Shell Open 方式呼叫 iexplore.exe 開啟該超連結。其中有個特殊需求,%1 接收字串參數中的 iehttp 要換成 http,用了點 DOS 指令技巧,用 cmd /v /c 執行程式,將 %1 存入變數,再對變數(在 cmd 要加 /v,變數 %var_name% 要改成 !var_name!)進行置換(語法為 !var_name:find_str=replace_str!),處理完畢傳給 iexplore.exe 開啟網頁。接著,將要用 IE 開啟的連結由 http: 改成 iehttp:,大功告成!(實務上應加入自動偵測,遇到非 IE 瀏覽器開啟網頁時,再將 IE Only 連結的 URL 改掉)
附上 iehttp URI Schema 註冊機碼如下:(若作業系統為 32 位元,Program Files (x86) 請改為 Program Files)
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\iehttp]
@="URL:Open with IE Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\iehttp\shell]
[HKEY_CLASSES_ROOT\iehttp\shell\open]
[HKEY_CLASSES_ROOT\iehttp\shell\open\command]
@="cmd /V /C \"set URL=%1&& set URL=!URL:iehttp=http!&&cmd /c \"\"C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe\"\" !URL!\""
提醒,跨瀏覽器開啟方式還是有些小缺點,雙方網頁即使同網域也無法共用 Session、Cookie,彼此的 DOM 也完全不相通,開啟過程會閃一下 DOS 視窗(可靠另寫小程式取代 cmd /c,請自行衡量是否需要)… 但對我來說,已能滿足不少單純的 Chrome / IE 併用需求,前進了一大步(灑花轉圈)~
另外附上完整操作示範影片。