【问题标题】:How to best detect if my website is being accessed through mobile device如何最好地检测我的网站是否正在通过移动设备访问
【发布时间】:2014-12-22 23:30:12
【问题描述】:

我有一个基于 python 的网站(在应用引擎上)。这意味着我的服务器是用 python 编写的,我使用通常的 webapp2 和 jinja2 来帮助提供我的页面。我想要完成的是,取决于是否有人通过 iPhone、Android 或普通计算机(即台式机或笔记本电脑)访问我的网站,以适当的“格式”为网页提供服务。我想有很多方法可以做到这一点

  1. 我可以通过 JavaScript 完成,然后重定向到适当的“移动”网址
  2. 或者我可以在 Python 中完成并提供正确的页面

我在2 中的意思类似于

class ServeMyPage(webapp2.RequestHandler):
    def get(self):
      //...do some work to determine the device, such as screen size
      if device==iPhone
        //...get the iPhone page and serve it
        self.response.out.write(iPhonePage);
      else ...// etc, etc

在我的 sn-p 中,我在提供页面之前就这样做了。我想这会更快,因为它不会等待页面加载然后使用一些 JavaScript 检查我是否应该将内容更改为适当的格式。我希望这很清楚。

那么最好的方法是什么?我应该用 JavaScript 做吗?其他方式?或如我上面所示?如果如上所示,代码可能是什么样的?我的问题也是技术性的,因为我不知道在 Python 中放入什么代码。谢谢。

【问题讨论】:

    标签: javascript python mobile browser


    【解决方案1】:

    您可以使用modernizr's 触摸检测来检查它是否是触摸设备,如果是,您有一个用于移动设备的点。

    if (Modernizr.touch) {
    
    }
    else 
    {
        code for non mobile device
    }
    

    然后,您可以检查用户代理(这可能不是您的最佳选择,因为用户代理并不总是可靠的),并编写一个简单的 if else,代码仅在非移动设备上执行否则

      var isMobile = {
                Android: function () {
                    return navigator.userAgent.match(/Android/i);
                },
                BlackBerry: function () {
                    return navigator.userAgent.match(/BlackBerry/i);
                },
                iOS: function () {
                    return navigator.userAgent.match(/iPhone|iPad|iPod/i);
                },
                Opera: function () {
                    return navigator.userAgent.match(/Opera Mini/i);
                },
                Windows: function () {
                    return navigator.userAgent.match(/IEMobile/i);
                },
                any: function () {
                    return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
                }
            };
    
            if (isMobile.any()) {
    
            }
            else {
    
                 not mobile
            }
    

    另一种测试方法是检查 window.innerWidth 并仅在屏幕尺寸大于 760 像素时才初始化脚本:

    if (window.innerWidth > 760) {
    not mobile
    }
    

    一个很好的方法是结合上面的 3 个语句来检查。

    【讨论】:

    • 谢谢。我要检查一下并报告。
    • 所以你建议使用 JavaScript。但有人告诉我,在 JavaScript 级别进行检查会导致加载速度滞后。那么您知道在 python/服务器级别执行此操作的方法吗?
    • 对不起,我对python不熟悉。我只能说,在使用上述方法时,我的应用程序没有看到加载速度滞后。如果速度下降,我会说这是非常微不足道的。
    【解决方案2】:

    您可以使用 WURFL API 来检测设备类型

    http://wurfl.sourceforge.net/wurfl_schema.php

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2012-09-25
    • 2015-07-14
    • 1970-01-01
    • 2011-10-28
    • 2016-04-24
    相关资源
    最近更新 更多