使用javascript仅定位safari

时间:2012-03-18 22:06:27

标签: javascript safari

想知道是否可能。

找到:

<script type="javascript">
isSafari3 = false;
if(window.devicePixelRatio) isSafari3 = true;
</script>
<{3>} http://dustinbrewer.com/css-hackgetting-safari-to-behave/。但它似乎同时针对chrome和safari,我假设它更像是一个webkit目标。还

console.log(isSafari3);

以px计数返回,而不是布尔值。所以我不确定那个人在谈论什么。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您无法可靠地使用devicePixelRatio的存在来可靠地检测Safari。它今天可能会工作,但没有什么能阻止其他浏览器实现它,然后你的代码就会完全崩溃。

测试特定浏览器通常是个坏主意。更聪明的做法是测试您要使用的特定功能。如果浏览器显示该功能存在,则使用它,如果没有,则使用其他一些回退机制。

功能检测更容易维护,因为随着浏览器的更改,您不必不断更改代码以调整每个浏览器的不同版本的行为。随着浏览器通过添加对最新功能的支持而发展,您的代码会自动适应它们。

这是一篇关于特征检测的文章:http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scriptinglibrary modernizr包含许多功能检测代码段,您可以将其整体使用,也可以查看它如何检测功能并仅使用该特定检测。

答案 1 :(得分:0)

此表达式将window.devicePixelRatio的值转换为boolean:

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

在Chrome中返回true,在Firefox中返回false。

考虑:

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

if (window.devicePixelRatio){
// false
}

window.devicePixelRatio = "foo"; 

if (window.devicePixelRatio){
// true
}

除了@ jfriend00提到的原因,它可能是一个糟糕的主意。