2010-10-24 74 views
4

我對javascript一無所知,而且對編程沒有太多瞭解,但我想創建一個檢查用戶操作系統的頁面,如果他們使用的是移動操作系統(iphone,android等),則轉發它們移動網站,如果他們正在使用電腦,轉發他們到正常的網站。這是我做的頁面:如何從Javascript檢測瀏覽器操作系統?

<head> 
<title>OS Check | website.web.org</title> 

<SCRIPT LANGUAGE = "javaScript"> 

if (navigator.appVersion.indexOf("Win")!=-1) && (navigator.appVersion.indexOf("Mac")!=-1) && (navigator.appVersion.indexOf("X11")!=-1) && (navigator.appVersion.indexOf("Linux")!=-1) location.href= "http://website.web.org/mobile/index.html" 

else location.href = "http://website.web.org/Home.html" 

</SCRIPT> 
</head> 

基本上,它的意思做的是檢查所有主要計算機操作系統中,如果其還沒有一個,向用戶發送到移動網頁,但如果它就是其中之一,將它們發送到計算機網站。

有人可以告訴我這個頁面/腳本中的錯誤/問題是什麼?

感謝, 盧克

+0

查看CSS媒體類型。單個HTML頁面,根據設備類型不同的樣式。 – BalusC 2010-10-24 14:47:16

+0

繼續@ BalusC的評論,我會指出你[這個答案](http://stackoverflow.com/questions/3893342/do-iphone-android-browsers-support-css-media-handheld/3893391#3893391)它提供*關於媒體查詢的一些*信息,並鏈接到[同一列表分離文章](http://www.alistapart.com/articles/return-of-the-mobile-stylesheet)。 – 2010-10-24 14:52:06

回答

4

的問題是,你的括號是錯誤的。試試這個:

if (navigator.appVersion.indexOf("Win")!=-1 
    && navigator.appVersion.indexOf("Mac")!=-1 
    && navigator.appVersion.indexOf("X11")!=-1 
    && navigator.appVersion.indexOf("Linux")!=-1){ 
     document.location.href= "http://website.web.org/mobile/index.html"; 
} 
else{ 
     document.location.href = "http://website.web.org/Home.html" 
} 
14

什麼是錯的這個腳本?

是的,幾乎所有的東西。

if聲明中缺失的括號,到老派language屬性,到可能導航的JavaScript重定向,再到基於粗略用戶代理嗅探的整個重定向思路。您的策略對於Windows Mobile(包含「Windows CE」),Windows Phone,iPhone/iPad(包含「Mac OS X」等字符串)和Android設備(包含「Linux」)將失敗。這是一個相當不錯的主要移動操作系統的失敗覆蓋範圍,更不用說可能不包括任何這些令牌的桌面瀏覽器。

您可能可以通過嗅探您想要檢測的特定情況來改善此情況。請參閱this list以瞭解存在的概況。

對於所有「移動」設備的處理方式,當該類別涵蓋從幾乎沒有互聯網功能的手機到大屏幕平板電腦時,都不太可能有意義。現代移動瀏覽器能夠提供正常的HTML頁面,特別是如果您通過使用液體佈局鼓勵可訪問性,以及手持式樣式表來減少必要的內容寬度。

+4

更不用說,相對較多的移動瀏覽器已禁用JS。 – BalusC 2010-10-24 16:05:28

+0

確實。至少,簡單的鏈接應該包含在''中。如果您必須使用單獨的界面並嗅探(JS或其他方式),您肯定需要手動方法/鏈接供用戶手動選擇它們的界面,因爲任何嗅探技術都會在很大比例的時間內失敗。 – bobince 2010-10-24 16:12:21

+0

...或兩者:'Get IE!' – Christian 2010-10-25 01:10:29

3

不要使用這些重定向客戶端,我建議你把這裏的腳本: http://detectmobilebrowser.com/

+0

是的,雖然在它,開始存儲您的密碼/用戶數據庫在這裏:[email protected] – Christian 2010-10-25 01:20:34

+0

對不起,這是什麼意思? – netadictos 2010-10-25 06:54:47

2

我會使用「瀏覽器功能檢測」,檢測瀏覽器是否支持某些功能。如果沒有,那麼將它們重定向到該網站的兼容版本。從長遠來看,這是更安全的,因爲當瀏覽器更新以包含新功能時,它將允許使用最佳網站版本。

https://developer.mozilla.org/en/Browser_Feature_Detection

6

的其他意見都是有效的,但我覺得你的問題的根源是這樣的:重新格式化時

if (navigator.appVersion.indexOf("Win")!=-1) && (navigator.appVersion.indexOf("Mac")!=-1) && (navigator.appVersion.indexOf("X11")!=-1) && (navigator.appVersion.indexOf("Linux")!=-1) 

if (navigator.appVersion.indexOf("Win")!=-1) 
    && (navigator.appVersion.indexOf("Mac")!=-1) 
    && (navigator.appVersion.indexOf("X11")!=-1) 
    && (navigator.appVersion.indexOf("Linux")!=-1) 

這相當於

if (isWindows 
    && isMac 
    && isX11 
    && isLinux) 

(因爲indexOf("foo")!=-1表示「找到foo」)。

你能看到這裏的邏輯錯誤嗎?

這就是爲什麼你應該遵循其他答案的建議:格式化你的代碼,使它可讀,並(在可能的情況下)使用現有的庫。明智地使用CSS也是你的朋友。

2

這會告訴你如何使用JavaScript進行瀏覽器檢測,這並不難。它實際上不會告訴哪個操作系統,但因爲它會知道它是否在手機或計算機上使用瀏覽器,因此它可以用於指導您想要的移動網站。

http://www.javascriptkit.com/javatutors/navigator.shtml

5

我可能有點爲時已晚,但這裏有雲:

我創建移動網站最主要的原因是要與不同屏幕尺寸的設備兼容。使用JavaScript很簡單,可以根據用戶的屏幕大小將用戶重定向到不同的鏈接,只需在index.html中添加 - Apache男生會討厭,所以我最好警告你,這不是「最有效」的方式,但這對我的目的來說足夠了。

<html> 
<head> 
<meta http-equiv="refresh" content="0;document.location" /> 
</head> 
<body> 

<script language="javascript" type="text/javascript">// <![CDATA[ 
if (screen.width <= 699) { 
document.location = "LINK TO YOUR MOBILE SITE"; 
} 

else{ 
     document.location.href = "LINK TO YOUR DESKTOP SITE" 
} 
// ]]></script> 
</body> 

</html> 

快樂編碼!

相關問題