所以我需要使用现代化程序检测webp支持,然后根据结果的结果在PHP中进行一些处理。
现在起初我以为我可以设置一个cookie并使用PHP来获取cookie:
JS:
Modernizr.on('webp', function (result) {
if (result) {
setCookie("webpissupported", "yes", "365");
}
});
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
PHP:
$userAvatar = um_get_avatar_uri( um_profile('profile_photo'), 190 );
$patterns = array("/.jpg/", "/.jpeg/", "/.png/");
if (isset($_COOKIE['webpsupport']))
$userAvatar = preg_replace($patterns, "_result.webp", $userAvatar);
现在上面代码的问题是我正在使用wordpress插件w3总缓存,并启用了页面缓存。这导致cookie被缓存并产生意外结果。
那么我想也许我可以这样做:
<script type="text/javascript">
Modernizr.on("webp", function (result) {
if (result) {
<?php $webpSupport = true; ?>
}
});
</script>
但这不起作用。
任何人都知道如何解决这个问题。
答案 0 :(得分:0)
您与服务器端(PHP)进行了混合(客户端)浏览器端处理。在您的示例中,无论以后通过浏览器/ JS处理(或者在没有JS
浏览器的情况下都不会处理),将执行PHP代码块。因此,在这种情况下,$webpSupport
变量和示例应该是从上到下按顺序分配给它的。
实现目标的一种方法是设置JS cookie,setCookie("webpissupported", "yes", "365");
并在下一页视图中阅读$_COOKIE['webpissupported']
并根据它提供图像。
请记住,根据caniuse.com / StatCounter,webp
不是标准版,但在72.85%浏览器中有效。你必须将它用作渐进增强。