2012-03-18 25 views
0

想知道它是否可能。僅針對使用javascript的Safari瀏覽器

發現:

<script type="javascript"> 
isSafari3 = false; 
if(window.devicePixelRatio) isSafari3 = true; 
</script> 

http://dustinbrewer.com/css-hackgetting-safari-to-behave/。但它似乎同時針對Chrome和Safari,我假設它更像是一個webkit目標。也

console.log(isSafari3); 

返回一個px計數,而不是一個布爾值。所以我不確定那傢伙在說什麼。

感謝您的幫助。

+0

爲什麼你需要檢測Safari? – 2012-03-18 22:14:40

+0

我在第一個答案中詳細說明了這個問題。謝謝@ŠimeVidas – 2012-03-18 22:30:07

回答

3

您無法可靠地使用devicePixelRatio的存在來可靠地檢測到Safari。它可能在今天工作,但沒有什麼能阻止其他瀏覽器實現它,然後你的代碼將被完全破壞。

測試特定瀏覽器通常是一個壞主意。更聰明的做法是測試你想要使用的特定功能。如果瀏覽器顯示該功能存在,則使用該功能,否則使用其他回退機制。

功能檢測更容易維護,因爲隨着瀏覽器的變化,您不必不斷更改代碼來調整每個瀏覽器不同版本的行爲。隨着瀏覽器通過增加對最新功能的支持而發展,您的代碼會自動適應這些功能。

這是關於特徵檢測的文章:http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scriptinglibrary modernizr包含許多功能檢測代碼片段,您可以全部使用,也可以查看它如何檢測功能並僅使用該特定檢測。

+0

好的,爲了擴大我想要完成的工作,我正在開發一個具有可選全屏功能的項目。 Safari瀏覽器支持真正的全屏,但是CSS會變得不可思議。所以我正在考慮嘗試檢測Safari,併爲這種情況設置了一些特定的代碼。猜我會開始尋找另一種方式。 – 2012-03-18 22:15:42

+1

@AdamBickford - 爲什麼你不能檢測到你需要的全屏功能的所有部分,如果他們這樣做,那麼你可以實現該功能,而不管它碰巧是哪個瀏覽器。 – jfriend00 2012-03-18 22:18:51

+0

我不確定你的意思是「所有的作品」,但是爲了詳細闡述_further_,在chrome和safari中的全屏幕完全按照預期填滿了窗口。一旦全屏顯示,我們會​​將它分成兩部分,使用'window.outerWidth/2 +'px''來計算屏幕的一半。這在鉻合金中是完美的,但是在safari中,它並不計算屏幕的一半,並且有一個2-3英寸的條分隔兩個半部分。 – 2012-03-18 22:28:20

0

這種表達window.devicePixelRatio的值強制轉換爲布爾:

isSafari3 = false; 
if(window.devicePixelRatio) isSafari3 = true; 

在Firefox返回Chrome的真,假。

考慮:

window.devicePixelRatio = undefined; // false, null, "", 0 

if (window.devicePixelRatio){ 
// false 
} 

window.devicePixelRatio = "foo"; 

if (window.devicePixelRatio){ 
// true 
} 

這且不說它可能是由@ jfriend00提到的原因,貧窮的想法。

相關問題