這是 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 Scheme 功能,我定義一個 iehttp://… URI Scheme,並透過 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 Scheme 註冊機碼如下:(若作業系統為 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 的成本,靈活性稍差些。


Comments

# by Murphy

萬一是HTTPS呢?內部網站大多也會採用https 會不會直接生一個ie:這一個protocol, 在現有網址前面套用即可? 這樣可以一次滿足兩種需求

# by chiu

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

# by Jeffrey

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

# by Jeffrey

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

# by Murphy

小弟之前有試過此法, 似乎後面的URL不需要事先 encode 也是可以的 http://software-testing-evolution.blogspot.tw/2014/08/register-url-protocol-handlers-to.html

# by Jeffrey

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

# by Wolf

很棒又簡單的作法!! 但是有一個問題..如果要打開的IE需要傳遞多個參數..就需要用到'&' 符號.. 但是會被cmd 判斷為 無效的命令.. 是否有解呢?

# by Jeffrey

to Wolf, 命令列遇到 & 可改寫成 ^& 跳脫。參考:https://stackoverflow.com/a/27960888/288936

Post a comment