參考文獻:
http://www.pseudowired.com/2012/12/04/tomcat-http-header-manipulation/(html中自動添加使用chrome的header)
http://www.baike.com/wiki/Google+Chrome+Frame(google chrome frame介紹)
http://www.cnblogs.com/Libra/archive/2009/03/24/1420731.html
項目背景:
我們的項目中使用了highcharts和svg相關的內容,所以要求至少要IE9才可以,或者使用firefox、chrome等其他瀏覽器。但是客戶是國企,他們使用的都是windows自帶的瀏覽器,普遍是IE7和IE8,有些甚至還是windows xp自帶的IE6,讓人倍感崩潰。
當時建議客戶升級IE版本,升級到至少IE9,但是他們的OA系統支持只IE7跟IE8,這樣的事情還真有,我自己公司就是這樣子。所以升級的提議被否決。
然后建議客戶下載chrome瀏覽器,但是客戶說他們很多人都是訪問不了外網的,而且領導們都懶得下載瀏覽器,太麻煩。
無奈執行我就只能選擇以下的解決方案
解決方案:
瀏覽器判斷
在web頁面上做瀏覽器判斷,如果瀏覽器版本低於<=IE8,那么就跳轉頁面,轉到下載chrome瀏覽器或者下載google chrome frame的頁面
<script type="text/javascript"> $(document).ready(function(){ var bro=$.browser; var binfo=""; if(bro.msie) { binfo= "Microsoft Internet Explorer " +bro.version; if(eval(parseInt($.browser.version))<9) { // alert(binfo); location.href='./browser.html' } } if(bro.mozilla) { binfo= "Mozilla Firefox "+bro.version; } if(bro.safari) { binfo= "Apple Safari "+bro.version; } if(bro.opera) { binfo= "Opera "+bro.version; } //alert(binfo); }) </script>
google chrome frame的介紹
在文獻2種我們可以大體知道google chrome frame是個什么東西。Google Chrome Frame,官方的正式中文名稱為“谷歌瀏覽器內嵌框架”。Google Chrome Frame是Google推出的一款免費的Internet Explorer專用插件。使用此插件,用戶可以通過Internet Explorer的用戶界面,以Chrome內核的渲染方式瀏覽網頁。在運行插件之后,IE瀏覽器將獲得Chrome的性能和功能。它將使用Chrome的WebKit 引擎處理網頁,另外也支持IE所沒有的HTML5等其他技術。
其實是一種掛羊頭(IE)賣狗肉(Chrome)的東西,或者說是披着羊皮的狼。但是我們就是需要這匹狼來給我們解決問題。
但是我們在安裝完這個插件以后發現,我們使用IE瀏覽器打開我們的網頁,還是給我跳轉到下載瀏覽器界面,我在首頁上面使用alter調試,判斷當前瀏覽器發現還是IE8。后來知道如果要是IE啟用chrome核心有兩種方法:(文獻2中有介紹)
- 修改注冊表,從此以后IE全部使用chrome核心。(與業務需求不符合,客戶還指望着使用IE8去訪問他們的OA呢)
- 在web頁面上面添加類似於X-UA-Compatible的標簽,主動讓IE使用調用chrome核心。(這正是我們當前需要的)
<meta http-equiv="X-UA-Compatible" content="chrome=1">
根據修改,我在自己的web頁面上面添加了一下內容,其含義如下:如果當前瀏覽器版本是<=IE8的,那么給我使用chrome,如果不是,則使用IE。
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=IE8">
urlrewritefilter的使用
歡歡欣欣做完以上內容,我想這樣我就可以訪問自己的網站的了把,可是悲哀的發現,只有首頁是使用chrome核心的,其他沒有加X-UA-Compatible標簽的頁面還是使用IE核心。這尼瑪太蛋疼了,難道讓我找出出所有html頁面,然后一個一個手動加上去,這樣的事情是人干的嗎?想着肯定有人跟我一樣碰到同樣坑爹的事情,所以就google搜索了一下,最后找到了文獻1。看到老外形容IE瀏覽器的詞,suck,fuck,shit,就能看出他是多恨IE了。按照該作者的介紹,我知道了urlrewritefilter,來到他的官方網站,跟着教程去一步一步執行。ok,最后解決問題了。
這個東西的整體思路就是,不管你是發request還是response請求,最后他都會在你的請求頁上面加上你設定的內容,我這里設定的內容就是 <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=IE8">。
最后google chrome frame這個東西到2014年就不再官方支持了,官方推薦我們下載最新的google瀏覽器。不過我想應該不會影響使用。