2009-11-24 119 views
1

我正在編寫一個Web應用程序,我想確定請求來自哪種類型的瀏覽器/操作系統,並相應地自定義返回的內容。因此,如果有人通過iPhone/Android訪問該網站,他們會獲得更加精簡的體驗,或者如果是臺式機,則可以獲得完整版本。我將採取完全不同的方式,而不是嘗試將內容混合在一起。根據瀏覽器類型更改網頁內容

在ASP.NET/IIS和PHP中對此進行推薦的方法是什麼?是否有一個地方可以捕獲傳入的HTTP請求,做出決定,然後重定向?或者這是通常在一頁一頁的情況下完成的?我應該注意的任何陷阱?

編輯:好的一點是確保在縮小版上有一個完整版的鏈接。這是一個很好的觀點,但會引發一個問題,即一旦用戶做出選擇,所有未來的重定向現在都必須指向完整版本。我寧願在一個地方做所有這些。

乾杯,

巴蒂爾

+0

如果由於某種原因導致瀏覽器檢測失敗,請確保您提供瀏覽完整版本的選項。 –

+0

當然。其實這提出了另一點。一旦有人做出該決定,來自該瀏覽器的所有請求都必須重定向到完整站點。我想知道這是如何完成的。 – Shane

回答

1

ASP.NET有一個內置的瀏覽器檢測機制。它由完全可擴展的XML文件(* .browser)集合驅動,其中包含用於匹配傳入User-Agent字符串的正則表達式以及匹配代理程序的相關屬性。

您可以從Request.Browser對象訪問屬性;您還可以根據瀏覽器細節標記控件屬性。

在網上有一堆關於這方面的信息 - 我在我的書中還詳細介紹了它:Ultra-Fast ASP.NET

+0

有趣。這聽起來像是一種自動重定向方式,但您將如何處理用戶選擇查看完整版本頁面的情況?現在,請求不會基於瀏覽器類型重定向,而是會話。 – Shane

+0

在.NET 3.5中,只需基於Request.Browser屬性設置邏輯或是否設置了某個會話級別標誌。在.NET 4.0中它更容易一些,因爲它們增加了對瀏覽器確定方式進行完全程序控制的功能,而不是僅基於User-Agent字符串和正則表達式 - 所以您可以添加會話檢查邏輯,然後可能仍然在標記中使用聲明性屬性。 – RickNZ

1

不是直接的答案,但它是值得一試的CSS媒體類型。您可以指定手持設備類型來簡化手機和其他小型屏蔽設備的頁面。

http://www.w3.org/TR/CSS21/media.html

1

你可以看看在HTTP請求中的用戶代理頭,並相應地重定向。

在PHP中,這將是$_SERVER['HTTP_USER_AGENT']

但是你應該注意,當你這樣做的時候你不會寫很多重複的代碼。

0

對於ASP.NET應用程序,您可以檢出Global.asax文件和Session_BeginRequest事件。