2012-03-18 50 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提到的原因,贫穷的想法。

相关问题