laravel设备检测,区分手机端浏览器和pc端浏览器,隐藏或显示某些代码

浅浅浅白
  • 142

目前找到了这么一个类似的插件
browser-detect
可以检测不同的设备
想完成如下的要求,因为就一个页面
直接在blade模板下完成类似需求,可行么?

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  @if (某个条件)
    <link rel="stylesheet" href="桌面浏览器代码.css">
    @else
      <link rel="stylesheet" href="手机浏览器代码.css">
  @end
</head>
<body>
    @if (某个条件)
  <script src="桌面浏览器代码.js"></script>
    @else
  <script src="手机浏览器代码.js"></script>
    @endif
</body>
</html>
回复
阅读 7.4k
3 个回答

可以这么做.

只是为什么不直接做成两个模板, 把两个模板共同的部分提成公共小模板.
在大模板中 @include ('widget')

在控制器中, 判断一下浏览器, 直接返回受益人view('浏览器模板')

//根据判断结果加载不同blade模板

 $isMobile = $this->isMobile();

 if ($isMobile) {
     return view('home');
 } else {
     return view('pc');
 }

//判断是否是移动端访问
   public function isMobile()
    {
        // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
        if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) {
            return TRUE;
        }
        // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
        if (isset ($_SERVER['HTTP_VIA'])) {
            return stristr($_SERVER['HTTP_VIA'], "wap") ? TRUE : FALSE;// 找不到为flase,否则为TRUE
        }
        // 判断手机发送的客户端标志,兼容性有待提高
        if (isset ($_SERVER['HTTP_USER_AGENT'])) {
            $clientkeywords = array(
                'mobile',
                'nokia',
                'sony',
                'ericsson',
                'mot',
                'samsung',
                'htc',
                'sgh',
                'lg',
                'sharp',
                'sie-',
                'philips',
                'panasonic',
                'alcatel',
                'lenovo',
                'iphone',
                'ipod',
                'blackberry',
                'meizu',
                'android',
                'netfront',
                'symbian',
                'ucweb',
                'windowsce',
                'palm',
                'operamini',
                'operamobi',
                'openwave',
                'nexusone',
                'cldc',
                'midp',
                'wap'
            );
            // 从HTTP_USER_AGENT中查找手机浏览器的关键字
            if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
                return TRUE;
            }
        }
        if (isset ($_SERVER['HTTP_ACCEPT'])) { // 协议法,因为有可能不准确,放到最后判断
            // 如果只支持wml并且不支持html那一定是移动设备
            // 如果支持wml和html但是wml在html之前则是移动设备
            if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== FALSE) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === FALSE || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
                return TRUE;
            }
        }
        return FALSE;
    }

建议做一个中间件,再给视图创建共享数据。
可以参考CI还是TP的那个config,里面有UA资料。

参见官方文档

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏