Paul Irishによると、RIMはこの問題について次のように述べています。
残念ながら、BlackBerry 6.0中にビルドシステムの問題が発生し、非タッチデバイスでもビルドでWebKitタッチサポートが有効になりました。これは長い間修正されていますが、一部のパブリックビルドにはこの問題があります。
考えられる回避策と最新の検出コードについては、github / Modernizrでこれらの(現在開いている)チケットを参照してから、必要に応じてプラグインを変更してみてください。以下の最新の検出コードが機能しない場合は、ブラックベリーを具体的に検出する必要があるかもしれません。
また、このタッチテストをチェックしてください。ブラウザスコープタブは、ブラックベリー9000がfalseとして検出されたことを示しているので、デバイスでもテストする価値があります。http://modernizr.github.com/Modernizr/touch.html
タッチ検出の最新のmodernizrソースには、投稿したコードに加えて@media検出が追加されているようです。
/*
* The Modernizr.touch test only indicates if the browser supports
* touch events, which does not necessarily reflect a touchscreen
* device, as evidenced by tablets running Windows 7 or, alas,
* the Palm Pre / WebOS (touch) phones.
*
* Additionally, Chrome (desktop) used to lie about its support on this,
* but that has since been rectified: crbug.com/36415
*
* We also test for Firefox 4 Multitouch Support.
*
* For more info, see: modernizr.github.com/Modernizr/touch.html
*/
tests['touch'] = function() {
var bool;
if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
bool = true;
} else {
injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {
bool = node.offsetTop === 9;
});
}
return bool;
};
BlackBerry /PlayBookUAスニッフィング
ユーザーエージェント文字列を使用し、こことここから提供されたソリューションから借用して、BlackBerryデバイスを具体的に検出するために、http: //jsbin.com/aliwur/1/edit#でテストしてjsbinでの作業を確認できるこの小さな関数を作成しました。javascript、liveを実行すると、ユーザーエージェント文字列からBlackberry 5.0 / 4.0/6.0とPlaybookが解析されます。
function rim_useragent_parser(ua) {
var info = false,
model = null,
model_number = null,
os_version = null;
if (ua.indexOf("BlackBerry") >= 0) {
if (ua.indexOf("Version/") >= 0) {
// BlackBerry 6 and 7
model = ua.match(/BlackBerry\s[0-9]*/);
if (model) {
model_number = model[0].match(/[0-9]+/);
pos = ua.indexOf("Version/") + 8;
os_version = ua.substring(pos, pos + 3);
info = {
'model' : model[0],
'model_number' : model_number[0],
'os_version' : os_version
};
}
}
else {
// BlackBerry Device Software 4.2 to 5.0
model = ua.match(/^BlackBerry[0-9]*/);
if (model) {
model_number = model[0].match(/[0-9]+/);
var SplitUA = ua.split("/");
os_version = SplitUA[1].substring(0, 3);
info = {
'model' : model[0],
'model_number' : model_number[0],
'os_version' : os_version
};
}
}
}
else if (ua.indexOf("PlayBook") >= 0) {
// PlayBook
model = ua.match(/RIM Tablet OS\s[0-9].[0-9].[0-9]/);
if (model) {
model_number = model[0].match(/[0-9].[0-9].[0-9]/);
pos = ua.indexOf("Version/") + 8;
os_version = ua.substring(pos, pos + 5);
info = {
'model' : model[0],
'model_number' : model_number[0],
'os_version' : os_version
};
}
}
return info;
}
もちろん、それはあなたが必要とする以上のものかもしれませんので、それを「Blackberry93006.0」だけに単純化するために私はあなたがこれをすることもできると思います:
var ua = navigator.userAgent;
if (ua.indexOf("BlackBerry") >= 0) {
if (ua.indexOf("Version/") >= 0) {
// BlackBerry 6 and 7
var model = ua.match(/BlackBerry\s[0-9]*/);
if (model) {
var model_number = model[0].match(/[0-9]+/);
if (model_number) model_number = model_number[0];
pos = ua.indexOf("Version/") + 8;
os_version = ua.substring(pos, pos + 3);
if (os_version === '6.0' && model_number === '9300') {
// do what you need specifically for this
}
}
}
}
より優れた万能ユーザーエージェントの解析については、ua-parserを参照してください。
https://github.com/tobie/ua-parser/