【发布时间】:2015-09-06 02:15:15
【问题描述】:
我的问题主要是关于页面重新加载而不是视网膜检测。我在 head 标签中使用下面的代码进行视网膜显示:
<script type="text/javascript">
if( document.cookie.indexOf('device_pixel_ratio') == -1
&& 'devicePixelRatio' in window
&& window.devicePixelRatio == 2 ){
var date = new Date();
date.setTime( date.getTime() + 3600000000 );
document.cookie = 'device_pixel_ratio=' + window.devicePixelRatio;
//if cookies are not blocked, reload the page
if(document.cookie.indexOf('device_pixel_ratio') != -1) {
window.location.reload(true);
}
}
</script>
它会检测访问者的屏幕类型,然后存储 cookie 并重新加载(如果是视网膜显示器)。它的工作没有问题,除了一个。
重新加载功能不会停止页面渲染。因此,您会在第一次访问时看到无样式的页面(半载),然后刷新。之后,由于存储了 cookie,网站的其余部分一切都很好。
很明显,PHP 没有提供检测屏幕类型的功能。必须通过JS来完成。但是 JS 没有合适的工具在不加载页面的情况下重新加载/重定向,甚至在 head 中使用了代码。
简而言之,我被困在两者之间。我希望有人可能会建议在首次加载时不显示任何内容的情况下重新加载(它甚至会显示我放在头部的内联样式)。还是在第一次加载时显示标准图像并让 Retina 用于其余的浏览体验是最佳选择?
顺便说一下,我尝试了 reload(true) 和 reload(false)。它没有帮助。
更新:请参阅下面 Marat Tanalin 的回答,了解可能的变通方法和更好的解决方案,以使用视网膜/高清显示图像,而不是存储 cookie + 重新加载。
在我对此进行深入研究之后,我意识到由于 *缓存方法,生成视网膜图像和标准图像可能并不是所有时间的答案。换句话说,在第一次访问时向访问者显示低质量图像并在刷新后显示高质量图像可能不起作用,因为低质量图像(和脚本)已经缓存。
我决定使用 1.5 倍的单张图片大小并支持 SVG 上传。虽然它不是各个方面的 100% 最佳答案,但比失去可靠性更好的选择。
*我是 Wordpress 开发人员,我参考了 WP Super Cache 和类似的缓存方法,但请注意,这也可能是其他缓存方法的问题。
【问题讨论】:
-
你把这个脚本块放在哪里了?
-
将此脚本移动到外部 JS 文件中。它会起作用的。
-
哇,好电话!您能否将此作为回复发布,以便我接受您的回答。谢谢!
-
我稍微修正了标题,我想这会有所帮助。再次感谢您的建议和帮助。
-
没问题,现在可以了。
标签: javascript cookies retina