桌面快捷方式无法显示从Session获取的网站Favicon,求助
解决动态Favicon桌面快捷方式不显示的问题
下面是针对你的问题的具体排查和解决步骤:
修正MIME类型
你当前动态Favicon的type写的是image/icon,这是错误的。不同格式的图标对应正确的MIME类型:- ico格式用
image/x-icon - PNG格式用
image/png - SVG格式用
image/svg+xml
修改后的代码示例:
<link rel="shortcut icon" type="image/x-icon" href="../../images/<?php echo $_SESSION['profile']['tenant_logo_uuid']; ?>">- ico格式用
改用绝对路径
桌面快捷方式抓取图标时,相对路径容易出问题(比如基准目录和当前页面不一致),建议换成网站根目录开头的绝对路径:<link rel="shortcut icon" type="image/x-icon" href="/images/<?php echo $_SESSION['profile']['tenant_logo_uuid']; ?>">如果你的网站不在根目录,也可以用PHP生成完整绝对URL:
<link rel="shortcut icon" type="image/x-icon" href="<?php echo 'https://' . $_SERVER['HTTP_HOST'] . '/your-path/images/' . $_SESSION['profile']['tenant_logo_uuid']; ?>">补充PWA兼容标签
浏览器的桌面快捷方式(尤其是PWA模式)会优先识别专门的图标标签,补充这些标签能提高识别率:<link rel="apple-touch-icon" sizes="180x180" href="/images/<?php echo $_SESSION['profile']['tenant_logo_uuid']; ?>"> <link rel="icon" type="image/png" sizes="32x32" href="/images/<?php echo $_SESSION['profile']['tenant_logo_uuid']; ?>"> <link rel="icon" type="image/png" sizes="16x16" href="/images/<?php echo $_SESSION['profile']['tenant_logo_uuid']; ?>">也可以动态生成
manifest.json文件(存为manifest.php),里面指定图标信息:<?php header('Content-Type: application/json'); $logo = $_SESSION['profile']['tenant_logo_uuid']; echo json_encode([ "icons" => [ [ "src" => "/images/$logo", "sizes" => "192x192", "type" => "image/png" ] ] ]); ?>然后在页面引入:
<link rel="manifest" href="/manifest.php">清除缓存
系统或浏览器可能缓存了旧的静态Favicon,强制刷新页面(Ctrl+F5)后再添加快捷方式,或者给图标URL加版本参数避免缓存:<link rel="shortcut icon" type="image/x-icon" href="/images/<?php echo $_SESSION['profile']['tenant_logo_uuid']; ?>?v=<?php echo time(); ?>">验证Session输出的正确性
先确认$_SESSION['profile']['tenant_logo_uuid']输出的是正确的文件名,直接访问生成的图标URL,看是否能正常打开图片。如果URL无效,那肯定无法显示图标。
内容的提问来源于stack exchange,提问作者Georgio Hayek
相关产品推荐
相关产品推荐

