android - 在移动设备上请求桌面站点选项

标签 android iphone web-applications mobile user-agent

许多移动设备(例如我的 Android 手机)都有“请求桌面站点”选项。我正在构建移动网站,并希望让该原生功能发挥作用。

我们作为开发人员的期望是什么?是否有 GET 请求,例如:leave_mobile=1 还是设备本身更改了用户代理以欺骗应用程序认为它只是另一个桌面?

最佳答案

我在我的 Android 设备上做了一些测试并读取了用户代理,它似乎发生了变化。因此,为了使 native 选项起作用,我所做的是将初始用户代理捕获到 session 中,并在每个页面请求上将其与发送的页面进行比较。 如果用户代理不同,则重新验证它是否是移动设备,如果为真,则用新用户代理覆盖 session 用户代理。但是,如果新验证失败,它可能想要找到桌面版本,因此发送一个新的 header 重定向。

$DesktopSite = 'www.example.com';
$UserAgent = $_SERVER['HTTP_USER_AGENT'];

if (!isset($_SESSION['use_mobile'])){
    $_SESSION['use_mobile'] = 1;
    $_SESSION['user_agent'] = $UserAgent;
} else if ($_SESSION['user_agent'] != $UserAgent){  // Check if user-agent has changed
    if(!preg_match( /*preg match from http://detectmobilebrowsers.com/ */){
        $_SESSION['use_mobile'] = 0;
        $_SESSION['user_agent'] = $UserAgent; // Overwrite old user-agent with new one.
        header("location: $DesktopSite"); // Send visitor to desktop website.
    } else {
        // Visitor still seems to be mobile.
        $_SESSION['use_mobile'] = 1;
        $_SESSION['user_agent'] = $UserAgent; // Overwrite old user-agent with new one.
    }
}

如果您是第一次在桌面上进入移动网站,它不会将您送回桌面网站,因为它会先创建 session 。通过这种方式,您也可以在桌面上查看移动网站,而不是被发回。但是,如果您更改用户代理,您将被重新验证并在失败时重定向。

完美运行。希望这对将来的任何人都有帮助。

关于android - 在移动设备上请求桌面站点选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16217681/

相关文章:

android - 知道列表滚动何时到达底部

带图像的按钮上的 iPhone 辅助功能

iphone - 碰撞时生成多个对象 - Corona SDK

maven - 使用 Maven Cargo 插件将 Web 应用程序部署到外部 glassfish4 实例

4 :3 tablets 上的 Android 相机预览纵横比

android - 如何将微调器添加到特定 fragment 的工具栏。谁能告诉我该怎么做?

java - 我想在 ListView 中一行显示两个项目

iphone - 如何在iPhone应用程序中定期补充游戏货币。

php - 如何在 Zend Framework 应用程序中存储用户上传的文件?

java - DynaValidatorForm 的目的