如何测试移动 webkit

Posted

技术标签:

【中文标题】如何测试移动 webkit【英文标题】:How to test for mobile webkit 【发布时间】:2011-09-28 14:58:23 【问题描述】:

我正在寻找建立一个新网站并希望采取负责任的“移动优先”方法。这种方法的一个原则是只加载您需要的内容,并避免在您真正需要它们之前包含大型浪费的库和框架。

为此,我打算使用modernizr2 来测试功能,然后仅加载所需的文件和库。

javascript 方面,我真的对使用像 zepto.js (http://zeptojs.com/) 这样的东西很感兴趣,它是一个小型 javascript 库 (2-5k),针对移动 webkit(和单独的移动 webkit)进行了优化,同时维护一个 jquery兼容的语法。它还被设计为可与完整的 jquery 一起“热交换”。所以我的策略是(在伪代码中):

移动 webkit 测试 If(true) 加载 zepto.js if(false) 加载 jquery

但现在我的问题是:你们会推荐什么(面向未来的)技术来检测移动 webkit,最好以纯 JavaScript 方式(不使用 jquery、插件或其他库)并且可以与 modernizr's testing API 集成?

【问题讨论】:

另一种方法是“CSS3 媒体查询”尝试用谷歌搜索它并进一步理解它,它确实是移动网络的东西,你可以在没有任何库的情况下做你不会做的事情:) 是的,我非常了解媒体查询并且过去使用过它们,但媒体查询检测屏幕尺寸,不一定是设备/浏览器。我正在寻找专门针对移动 webkit。 developer.apple.com/internet/webcontent/objectdetection.html 这有什么兴趣吗? 不,因为如果我想进行功能测试,我可以使用modernizr(我已经这样做了)但是如果我们谈论使用替代javascript库,功能测试只会让你到目前为止.我应该测试多少功能以确定我仍在使用移动 webkit 浏览器并使用 zepto.js?尤其是当您考虑到 Mac 上的桌面浏览器变得越来越具有触控功能时。 【参考方案1】:

gillesv 的回答几乎是准确的。但是,我发现 Regex 没有检测到 android 2.2 和 2.3(Froyo 和 Gingerbread)上的 Webkit 浏览器。 userAgent 确实包含短语“AppleWebkit”和“Mobile”,但末尾没有正斜杠。

如下修改代码对我有用:

// Webkit detection script
Modernizr.addTest('webkit', function()
  return RegExp(" AppleWebKit").test(navigator.userAgent);
);

// Mobile Webkit
Modernizr.addTest('mobile', function()
  return RegExp(" Mobile").test(navigator.userAgent);
);

【讨论】:

【参考方案2】:

好的,所以我想我的问题措辞不当或其他什么,但稍微挖掘了一下,我找到了一个可接受的解决方案,适用于我的用例。

// Webkit detection script
Modernizr.addTest('webkit', function()
return RegExp(" AppleWebKit/").test(navigator.userAgent);
);

// Mobile Webkit
Modernizr.addTest('mobile', function()
return RegExp(" Mobile/").test(navigator.userAgent);
);

这两个测试会将 'webkit' 和 'mobile' 类添加到您的 html 标记(如果为 false,则添加 'no-webkit' 和 'no-mobile'),但也允许您有条件地加载您喜欢的 javascript 库,视情况而定。

就我而言,在 JQuery 或 Zepto.js 之间切换:

Modernizr.load([
            // test mobile webkit (zepto or jquery?)
            
                test: Modernizr.webkit && Modernizr.mobile,
                nope: ['//ajax.googleapis.com/ajax/libs/jquery/1/jquery.js'],
                yep: [baseURL + 'js/lib/zepto.min.js']
            ]);

因此,当我检测到访问者正在使用移动 webkit 浏览器(可能就像 100% 的 ios 或 Android 设备一样)时,我可以为他们节省大量开销,并为其他人加载常规 JQuery,如有必要。由于语法非常相似,因此无论最终加载哪个框架,插件和其他脚本都可能仍然有效。

【讨论】:

以上是关于如何测试移动 webkit的主要内容,如果未能解决你的问题,请参考以下文章

打开 webkit 远程调试的移动浏览器

如何在 Safari 中的 WebKit 3D 转换后强制重新渲染

如何设置bootstrap 图片轮播图片的移动速度(不是间隔时间)?

HTML5 移动样板 Coffeescript 调用 [关闭]

WebKit 源码分析 -- loader

如何制作移动响应式垂直范围滑块