使用PHP和jQuery来检测移动设备

时间:2015-04-24 15:40:44

标签: php jquery mobile-devices

我正在尝试在我正在构建的网页上检测移动浏览器。桌面上的人会看到“粘性”菜单,而移动设备上的菜单则不会。

但是我有非常基本的技能,并没有真正超越HTML和CSS,让我觉得难以让它发挥作用。我希望有人可以指出任何显而易见的事情,因为我没有意识到......

我正在使用51Degrees PHP移动设备检测器(http://sourceforge.net/projects/fiftyone/)。

在我的主要网络文件中,我按照这里的说明进行操作:http://andrewhenderson.me/tutorial/jquery-sticky-sidebar/使用jQuery将粘性菜单合并到页面中。

所以我想要做的只是在用户不在移动设备上时使用粘性菜单CSS更改,使用从PHP移动探测器返回的值。

PHP部分:

<?php
session_start();
include_once('51Degrees/core/51Degrees.php');
include_once('51Degrees/core/51Degrees.usage.php');
?>

根据用户浏览器提供变量$_51d[‘IsMobile’]的值为True或False的文档。

根据我所读到的,PHP值可以传递给jQuery,因为两者都在同一个文件中。我发现建议使用这样的东西:var mobile = <?php echo ($_51d[‘IsMobile’]); ?>;。然后我想检查mobile是真还是假,如果它是假的,只继续使用脚本的其余部分。但我不确定如何去做,或者我的语法是否正确。无论哪种方式,我都没有得到我想要的结果。

<script type="text/javascript">
//<![CDATA[
                $(function(){ // document ready
                  var mobile = <?php echo ($_51d[‘IsMobile’]); ?>; 

                  if (mobile == 'false') {

                  if (!!$('.sticky').offset()) { // make sure ".sticky" element exists

                var stickyTop = $('.sticky').offset().top; // returns number 

                $(window).scroll(function(){ // scroll event

                  var windowTop = $(window).scrollTop(); // returns number 

                  if (stickyTop < windowTop){
                    $('.sticky').css({ position: 'fixed', top: 0 });
                  }
                  else {
                    $('.sticky').css('position','static');
                  }

                });

              }
            }
            });
  //]]>
  </script>

我认为这是一个非常明显和愚蠢的事情,我在这里失踪了,但由于我缺乏背景,我只是没有发生。任何帮助将不胜感激。

编辑:

感谢您的所有投入。在讨论了一些建议之后,似乎我的主要问题是将变量的值从PHP变为jQuery(在同一页面上)。

var mobile = <?php echo ($_51d[‘IsMobile’]); ?>;有问题。该值不会传递给jQuery。我在页面源代码中看到的只有var mobile = ;,我尝试了各种不同的编写方式来适应其他PHP方法。

有人发现了什么问题吗?

6 个答案:

答案 0 :(得分:0)

你可以很容易地做到这一点 -

    <script type="text/javascript">
        if (screen.width <= 800) {
            //do whatever you want
        }
    </script>

答案 1 :(得分:0)

您可以使用jquery

检测设备移动设备
$.browser.device = (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase()));

答案 2 :(得分:0)

使用http://detectmobilebrowsers.com/

中的示例

PHP:

<?php
    $useragent = $_SERVER['HTTP_USER_AGENT'];
    if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))) {
        $isMobile = true;
    } else {
        $isMobile = false;
    }
?>

jQuery的:

<script>
    (function(a){(jQuery.browser=jQuery.browser||{}).mobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);

    var isMobile = jQuery.browser.mobile;
</script>

使用PHP版本,然后在Javascript / jQuery中访问$isMobile;

<script>

    var mobile = '<?php echo ($isMobile); ?>';
    if (mobile == false) {
        console.log('FALSE');
    } else {
        console.log('TRUE');
    }

</script>

答案 3 :(得分:0)

modernizr是最好的插件。

该插件为html标记提供了许多可用于css或jquery的有用类。 (就像它的移动设备,或触摸设备等......)

jquery的:

if($('html').hasClass('touch')){ /* forgot the exact name of the classes modernizr  gives the html tag. just look it up at your tag after you installed the plugin */
    // do something only in mobile
}

但在你的情况下,我肯定会建议使用mediaquerys和css。

所以对于智能手机肖像,请使用:

@media all and (max-width: 420px) {}

智能手机格局使用:

@media all and (max-width: 580px) {}

平板电脑肖像使用:

@media all and (max-width: 768px) {}

平板电脑风景使用:

@media all and (max-width: 1024px) {}

不要忘记将视口设置在头部,也许像:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />

问候timotheus

答案 4 :(得分:0)

我喜欢移动侦测(http://mobiledetect.net/)。它是一个开源PHP类,您可以将其添加到您的应用程序中,然后像这样使用:

$detect = new Mobile_Detect;
$mobile = $detect->isMobile();
if($mobile)
    // Call mobile page template
else
    // Call desktop page template

答案 5 :(得分:0)

您可以使用mobiledetect库
作为作曲者软件包安装 下载链接和更多信息https://packagist.org/packages/mobiledetect/mobiledetectlib

和有关主题的文章

http://computerengineeringfree4u.xyz/how-to-detect-mobile-device-in-php/

希望您能找到解决方法