2011-07-25 25 views
1

我必須加載不同的樣式表,具體取決於用戶代理是iPad還是其他。我知道一般來說,檢測瀏覽器並不是最好的想法,並且可能會在未來某個時候削弱我們的可維護性。不是我的決定。加載依賴於用戶代理的樣式表

所以在這裏我們有一些JavaScript來檢測用戶代理。它不工作。我可能錯過了一些東西。我得到的錯誤是一個紅鯡魚(對象引用),但只在執行JavaScript時顯示。

$(document).ready(function() { 
     alert('ready fired'); 
     if (navigator.userAgent.indexOf("iPad") != -1) { 
      //alert('bleep bloop blop...iPad detected'); 
      var stringToWrite = '<script src=\'\<\%\= ResolveUrl("~/Scripts/iscroll.js") \%\>\' type="text/javascript"><\/script>'; 
      stringToWrite += '<link href=\'\<\%\= ResolveUrl("~/Stylesheets/scrollbar.css") \%\>\' rel="stylesheet" type="text/css" \/>'; 
      stringToWrite += '<link href=\'\<\%\= ResolveUrl("~/Stylesheets/iPadCommon.css") \%\>\' rel="stylesheet" type="text/css" \/>'; 
      alert(stringToWrite); 
      document.write(stringToWrite); 
     } 
     //else 
     //alert('bleep bloop blop...who cares browser'); 
    }); 
+0

您的userAgent存在問題嗎?警報('嗶嗶嗶嗶blop ... iPad檢測');'調用(如果沒有註釋掉)? –

+1

我個人想用服務器端語言來做這種檢查。 – locrizak

+0

@Peppered檸檬 - 是啊,它被稱爲。檢測很好。必須是我的字符串轉義。希望有一個自動逃脫這個糟糕的字符串的JavaScript webapp在線。 –

回答

1

你或許應該考慮檢測在服務器端的中介,否則不會爲具有JavaScript的瀏覽器工作禁用。

+0

+1我開始明白爲什麼我應該這樣做,無論我被告知什麼。 @Quentin有一個好點。 –

0

如果可能的話,您應該使用@media handheld來使用專用於手持設備的樣式規則。

如果它太粗,也就是說,如果你需要爲iPad不同的CSS與iPhone與Android相比,你應該做一個服務器端的檢測和CSS類添加到<html>和/或<body>標記,如

<html class="android"> 

<body class="iOS"> 

昆汀的評論是正確的 - 嘗試,因爲服務器沒有運行什麼JAV寫一個服務器端的元標記<%= ResolveUrl(etc) %>將無法​​正常工作 ascript寫道。服務器已完成處理。