在 Chrome/Edge 網頁用 IE 開啟超連結

這是 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 併用需求,前進了一大步(灑花轉圈)~

另外附上完整操作示範影片

2016-01-23更新

有好幾位網友問到直接使用 IE Tab 的可能性,在此補充一下我的看法。Chrome IE Tab 套件是很出色的解決方案,在 Chrome 直接內嵌 IE 瀏覽器控制項,開啟超連結時可以選擇要不要用 IE 開啟,但依我的觀點,應用於企業有一些額外考量:
  • Chrome 外掛元件為第三方開發,永續性及安全性較無保障(我自己就踩過 Inject jQuery 外掛自動進化成廣告軟體的地雷),資安單位可能會有意見。
  • 外掛元件需要使用者自行下載安裝,對某些使用者來說有難度。(Registry 可透過 GPO 在網域內自動部署)
  • IE Tab 用於商業用途需購買授權:IE Tab requires a license for business use.
  • IE Tab 可以透過 GPO 指定特定 URL 一律使用 IE 開啟,但靈活度比不上交給網頁自由控制。
除了 IE Tab 外,網友 Ou Andy 提到 Chrome 有個 Chrome for Business 版本(又長見識了,感謝!),可以透過 GPO 控制某些網頁使用 IE 開啟,也是一種解決方案,但有部署管理 Chrome 企業版及 GPO 的成本,靈活性稍差些。

歡迎推文分享:
Published 22 January 2017 11:51 PM 由 Jeffrey
Filed under:
Views: 5,363



意見

# Murphy said on 22 January, 2017 08:22 PM

萬一是HTTPS呢?內部網站大多也會採用https

會不會直接生一個ie:這一個protocol, 在現有網址前面套用即可?

這樣可以一次滿足兩種需求

# chiu said on 22 January, 2017 09:24 PM

黑大你好, 為何不簡單地用IE-Tab呢? 是因安全性考量?

# Jeffrey said on 22 January, 2017 11:12 PM

to Murphy, 我選擇多註冊一個iehttps:,註冊成ie應該也OK,但URL恐需改成ie:http%3A//blah...,我傾向讓自訂URI貼近正常版。

# Jeffrey said on 22 January, 2017 11:14 PM

to chiu, 有好幾位網友提到 IE Tab,我已把沒選擇它的理由補充在本文,感謝回饋。

# Murphy said on 02 February, 2017 02:15 AM

小弟之前有試過此法, 似乎後面的URL不需要事先 encode 也是可以的

software-testing-evolution.blogspot.tw/.../register-url-protocol-handlers-to.html

# Jeffrey said on 03 February, 2017 06:31 AM

to Murphy, 文章的做法好簡潔,謝謝你的分享。

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<January 2017>
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication