2011-09-29 73 views
6

我一直在做一些研究,我想我已經知道了答案,但我想知道是否有任何方法可以獲得設備的屏幕尺寸和像素密度,而無需使用JavaScript或依靠CSS3媒體查詢。檢測服務器端的屏幕大小和像素密度?

本質上,我正在研究如何獲得屏幕分辨率和像素密度,以便服務器可以決定在URI請求中將哪個圖像映射到服務器。

到目前爲止,我還沒有發現任何說這甚至可能,但我認爲嘿,爲什麼不問?

回答

0

Ruby運行在服務器端 - 無需從客戶端獲取信息,它無法瞭解任何客戶端功能。

+0

這就是我的想法。我想現在想到漏洞。 – dougoftheabaci

+1

我不確定有沒有 - 除非客戶告訴你,我不知道如何,這意味着通過JavaScript(可能)獲取一些信息。你*可能*能夠通過用戶代理收集*少量的信息,但這基本上是無用的。 –

+0

有關downvotes的評論,讚賞,特別是在正確的答案。確定屏幕尺寸和密度必然依賴於客戶端信息,這是無可爭辯的。獲取*準確*信息很困難 –

9

我完全不同意上面的正確答案。實際上,這個答案在許多情況下是正確的......但理論上不是。通常向Web服務器發出的請求包含User-Agent字段,理論上,該字段可用於識別有關設備屏幕分辨率和屬性的信息。

Web請求不首先通過客戶端。它們傳遞給服務器,服務器然後向客戶端提供頁面,以便服務器首先獲取請求...例如,Ruby on Rails通過操作控制器向資源接收請求,然後爲響應提供頁面。

來看一個例子UA解析器如:https://github.com/visionmedia/user-agent

通過我的電腦發送的樣本用戶代理是:

User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.11 (KHTML, like enter code here`Gecko) Chrome/17.0.963.83 Safari/535.11 

我認爲這絕對有可能使一個很好的猜測我的屏幕分辨率(DPI等)通過服務器給出信息。當然,你需要一個設備信息表來引用。

對於移動設備,它變得更加簡單。如果用戶代理是用於iPad的移動探險:

Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10 

您可以很清楚地知道屏幕分辨率在服務器上是什麼。您甚至可以通過該信息瞭解瀏覽器的高度和寬度。我懷疑許多移動設備(如Android或Win Mo)也是如此。

因此總而言之,我同意這樣做的不切實際,但我也不同意。

我相信Facebook已經承擔了主要的項目編目設備和屏幕分辨率,並且使它成爲開源的,因爲他們在創建Facebook移動應用時面臨類似的問題。他們必須對所有移動瀏覽器渲染器之間的所有差異進行編目,以便他們可以根據每個個案調整客戶端應用程序。也許這個項目在理論上可能有這樣做的必要信息。

+1

因此,您正在任何一個,3-4 MBP和兩個具有任意監視器大小的桌面上運行OSX?除非您運行iOS設備,否則在移動設備上並不容易。咩。 –

2

的東西,這是不可能的,它看起來像Mobvious做一個體面的工作:

Mobvious檢測是否您的應用程序/網站是由一個 電話訪問,或片劑,或由個人計算機。然後,您可以在整個應用中使用 這一信息。 (例如,分叉您的前端代碼 關於設備類型。有一個Ruby on Rails的插件, 可以幫助你做到這一點。)

https://github.com/jistr/mobvious

+1

Mobvious不看屏幕大小,只看用戶代理,URL或cookie。 –

0

你可以使用Ahoy。 current_visit方法包含以下信息。

當有人訪問您的網站時,Ahoy會創建一個有很多 有用信息的訪問。

流量來源 - 引薦,指域,登陸頁面,搜索
關鍵字位置 - 國家,地區和城市的技術 - 瀏覽器,操作系統, 和設備類型
UTM參數 - 來源,媒介,字詞,內容 活動

相關問題