2011-05-31 126 views

回答

3

服務器端瀏覽器檢測或功能檢測是出了名的錯誤。

在服務器上用戶擁有的瀏覽器的唯一可見性是用戶代理字符串。

不幸的是,這是完全不可靠的,因爲它可以被客戶欺騙。由於各種防火牆和安全產品的原因,它也經常被隱藏起來,一些代理也會修改或刪除它。

簡而言之,沒有可靠的方法從服務器檢測瀏覽器。

我對你有兩個建議:

1)使用AJAX方法。正常情況下(使用Modernizr或您最喜歡的其他技術)在Javascript中檢測功能,然後將檢測結果發送回服務器。如果用戶真的想要這樣做,它仍然可以被攔截和欺騙,但是不太可能,並且肯定會解決我用防火牆和代理描述的問題。

2)爲什麼關心SVG的支持,當唯一不支持它的瀏覽器是IE8(或更低)? IE支持VML,而且有許多Javascript工具可用於將SVG轉換爲VML,因此使用SVG的應用程序可以在所有瀏覽器中運行。我最喜歡的是Raphael,但拉斐爾是繪製圖形的庫;既然你已經有了SVG,你可能會發現一個簡單的轉換庫更有用。像這樣的東西,或許:http://code.google.com/p/svg2vml/或者這個:http://code.google.com/p/svgweb/

希望有幫助。

+0

這是因爲我使用的圖表庫無法對SVG和VML使用相同的格式代碼。所以如果我在一個上看起來不錯,那麼看起來就不好。所以爲了解決這個問題,我想檢測他們是否有SVG,然後使用備用樣式。我無法使用Ajax,因爲我需要在第一頁渲染時執行操作。看起來我必須檢測瀏覽器。 – KingOfHypocrites 2011-06-02 18:25:02

+0

@King:我想我會建議使用更好的製圖庫,如Raphael(及其姐妹製圖庫g.Raphael),它使SVG/VML翻譯變得透明。但是聽起來你已經在一段不同的路上走了一段距離,所以便宜的答案只是檢測IE8並降低,並希望你的用戶爲你提供有效的UA。 – Spudley 2011-06-03 07:51:44

+1

儘管如果他們想要的話,幾個Android設備也不支持SVG(他們選擇不用它們來節省內存使用)。所以說普通的瀏覽器都支持SVG或VML是不公平的。有時你必須回退到服務器渲染的PNG圖像。 – 2011-12-24 17:23:04