我正在创建一个检测脚本,当用户到达我的网站时,该脚本会嗅出任何带有视网膜显示器(或类似设备)的设备(目前只有iPhone4)。因为分辨率更高,我需要推动更高分辨率的图像/图形。我能找到的唯一解决方案(使用PHP和JavaScript)是检测devicePixelRatio
并设置cookie。这是我正在使用的代码:
<?php
$imgPath = "images/";
if(isset($_COOKIE["imgRes"])){
$imgRes = $_COOKIE["imgRes"];
if( $imgRes >= 2 ){
$imgPath = "images/highRes/";
}
} else {
?>
<script language="javascript">
var the_cookie = "imgRes="+window.devicePixelRatio+";"+the_cookie;
document.cookie = the_cookie;
location = '<?=$_SERVER['PHP_SELF']?>';
</script>
<?php
}
?>
有没有人遇到过更好的方法,或者有任何改进此脚本的建议。这个脚本确实有效,只是感觉很脏。
答案 0 :(得分:9)
Brian Cray的回答似乎是错误的。
在javascript中执行此操作的正确方法是:
var retina = window.devicePixelRatio && window.devicePixelRatio >= 2;
答案 1 :(得分:2)
您可以使用如here所述的CSS3媒体查询,但这只会让您在客户端添加其他CSS规则,而不是调整服务器端的图像路径。这适用于具有有限数量的静态图像的站点。
答案 2 :(得分:1)
当我需要在网站上添加对视网膜显示的支持时,我实施了一个非常“低技术”的解决方案: 我将所有图像的大小加倍,并将它们设置为以50%的大小显示。
不幸的是,它意味着每个设备都在加载高分辨率图像,即使它不支持它们,但我没有很多图形需要担心,所以对我来说这是一个很好的解决方案。
答案 3 :(得分:0)
Brian Cray有一个单行的JavaScript答案:
http://briancray.com/2011/05/05/detect-retina-displays-with-javascript/
这很简单:
var retina = window.devicePixelRatio > 1 ? true : false;
答案 4 :(得分:0)
我使用的技术使用脚本对正确的图像进行单一请求,在没有可用的javascript时回退到默认值。
您需要一个小的polyfil来可靠地读取所有浏览器(IE8及以下版本)中的noscript标签内容,您可以找到here