对于iOS版的Google Chrome浏览器,当用户点击“请求桌面站点”按钮时,浏览器会做什么来尝试呈现桌面站点?我想象中可能是在请求头中添加了某种站点所需的信息,或者类似的操作。
对于iOS版的Google Chrome浏览器,当用户点击“请求桌面站点”按钮时,浏览器会做什么来尝试呈现桌面站点?我想象中可能是在请求头中添加了某种站点所需的信息,或者类似的操作。
我认为唯一的区别在于请求中的 User-Agent:
头部。
这里是我在安卓设备上使用Chrome时发送的User-Agent头部:
Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.45 Safari/535.19
注意第一个里面的“移动”这个词,还有提到了Android系统和设备。检查这些内容后,我发现它也提供了错误的信息 - 即X11和x86_64 - 以紧密匹配Chrome桌面版发送的值。
我想指出的是,现在Chrome不仅更改User-Agent
,而且如果你选择“请求桌面站点”,它还会忽略原始的viewport meta标记。因此,不再需要嗅探User-Agent
了,你可以依靠viewport的变化,因为大多数响应式网站都会自动进行调整。请参阅此更改以获取更多信息。
还有一个细微的区别,那就是请求似乎是针对最后一个有意输入的URL,而在任何重定向器移动它之前。例如:
假设:somesite.com检测到代理,看到Android,并执行document.location += "/m";
那么:浏览器的URL将为somesite.com/m
但是:如果您“请求桌面站点”,它将更改用户代理并从somesite.com重新请求
除非:您一开始就直接进入移动端的somesite.com/m URL,否则它只会重新加载somesite.com/m。
我希望这适用于HTTP 301和302重定向,我知道它适用于document.location更改(至少如描述的那样),并且推测它适用于刷新。
这个 JavaScript 代码片段将有效地执行相同的操作:
function requestDesktopSite() {
document.getElementsByTagName('meta')['viewport'].content='min-width: 980px;';
}
<button onclick="requestDesktopSite()">Request Desktop Site</button>