5

许多像我的安卓手机这样的移动设备都有一个“请求桌面站点”选项。我正在构建移动网站,并希望使该原生功能发挥作用。

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

4

1 回答 1

6

我已经在我的 android 设备上做了一些测试,并读出了用户代理,似乎它发生了变化。因此,我为使这个本机选项起作用所做的是将初始用户代理捕获到一个会话中,并在每个页面请求上将其与发送的那个进行比较。如果用户代理不相同,则重新验证它是否是移动设备,如果为真,则用新的覆盖会话用户代理。但是,如果新验证失败,它可能希望找到桌面版本,因此发送新的标头重定向。

$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.
    }
}

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

完美运行。希望这可以帮助将来的任何人。

于 2013-04-26T07:52:05.587 回答