Блок служит для сбора данных о браузере пользователя.
| Элемент | Способы использования | Описание |
|---|---|---|
| svg | deps |
Проверяет, поддерживает ли браузер формат SVG. |
Блок реализован в технологиях:
bh.jsbemhtmlБлок подключает инлайновый скрипт, добавляющий тегу <html> CSS-классы, указывающие, включен ли JavaScript – ua_js_no/ua_js_yes.
Не имеет визуального представления на странице.
Используется внутри блока page и самостоятельно подключать его к странице обычно не требуется.
svgЭлемент подключает инлайновый скрипт, добавляющий тегу <html> CSS-классы, указывающие, поддерживается ли SVG – ua_svg_no/ua_svg_yes.
Не имеет визуального представления на странице.
Для использования включите элемент в файл зависимостей deps.js блока, которому требуются данные о поддержке SVG:
На уровне touch, блок предоставляет объект, содержащий набор свойств, указывающих особенности мобильного устройства.
| Имя | Тип | Описание |
|---|---|---|
| ua | {String} |
Значение HTTP-заголовка юзер-агента. |
| ios | {String}|{undefined} |
Версия мобильной платформы iOS. |
| android | {String}|{undefined} |
Версия мобильной платформы Android. |
| bada | {String}|{undefined} |
Версия мобильной платформы Bada OS. |
| wp | {String}|{undefined} |
Версия мобильной платформы Windows Phone. |
| other | {Boolean} |
Мобильная платформа неопределена. |
| opera | {String} |
Версия браузера Opera. |
| chrome | {String} |
Версия браузера Chrome. |
| iphone | {Boolean} |
Устройство – iPhone. |
| ipad | {Boolean} |
Устройство – iPad. |
| screenSize | {String} |
Размер экрана устройства. |
| connection | {String} |
Тип активного соединения. |
| dpr | {Number} |
Относительная плотность пикселей. |
| flash | {String}|{undefined} |
Версия Adobe Flash. |
| video | {Boolean} |
Поддержка видео. |
| width | {Number} |
Ширина рабочей области экрана в px. |
| height | {Number} |
Высота рабочей области экрана в px. |
| landscape | {Boolean} |
Ориентация устройства. |
| Элемент | Способы использования | Описание |
|---|---|---|
| dom | JS |
Предоставляет набор модификаторов на основании свойств блока ua на тач-уровне. |
| Элемент | Модификатор | Допустимые значения | Способы использования | Описание |
|---|---|---|---|---|
| dom | platform | 'ios', 'android', 'bada', 'wp', 'other' |
JS |
Мобильная платформа пользовательского устройства. |
| browser | 'opera', 'chrome' |
JS |
Тип браузера. | |
| ios | '8', '7' ... |
JS |
Версия операционной системы для устройств iOS. | |
| ios-subversion | '81', '80' ... |
JS |
Подверсия операционной системы для устройств iOS. | |
| android | '4', '3' ... |
JS |
Версия операционной системы для устройств Android. | |
| screen-size | 'large', 'normal', 'small' |
JS |
Размер экрана устройства. | |
| svg | 'yes', 'no' |
JS |
Поддержка формата SVG. | |
| orient | 'landscape', 'portrait' |
JS |
Ориентация устройства. |
Блок реализован в технологиях:
jsbh.jsbemhtmlБлок позволяет определить:
modules.require('ua', function(ua) {
console.dir(ua);
});
uaТип: {String}.
Тип мобильного браузера.
iosТип: {String|undefined}.
Версия мобильной платформы. Строка с номером версии, если платформа распознана как iOS.
androidТип: {String|undefined}.
Версия мобильной платформы. Строка с номером версии, если платформа распознана как Android.
badaТип: {String|undefined}.
Версия мобильной платформы. Строка с номером версии, если платформа распознана как Bada OS.
wpТип: {String|undefined}.
Версия мобильной платформы. Строка с номером версии, если платформа распознана как Windows Phone.
otherТип: {Boolean}.
Мобильная платформа неопределена. Устанавливается в значение true для всех мобильных платформ, кроме вышеперечисленных.
operaТип: {String}.
Версия браузера Opera.
chromeТип: {String}.
Версия браузера Chrome.
iphoneТип: {Boolean}.
Значение true характеризует устройство как iPhone.
ipadТип: {Boolean}.
Значение true характеризует устройство как iPad.
screenSizeТип: {String}.
Размер экрана устройства.
Доступны следующие значения:
large – размер экрана больше 320 px.normal – размер экрана равен 320 px.small – размер экрана меньше 320 px.connectionТип: {String}.
Тип активного сетевого соединения.
Доступны следующие значения:
wifi – соединение по Wi-Fi.3g – соединение по 3G.2g – соединение по EDGE и GSM.dprТип: {Number}.
Коэффициент относительной плотности пикселей. Характеризует отношение физических пикселей устройства к аппаратно независимым (dppx). Позволяет определить использует ли устройство дисплей с повышенной плотностью пикселей (например, Retina). По умолчанию 1.
Например, можно проверить, что устройство использует Retina и отдавать браузеру изображения с высоким разрешением:
modules.require('ua', function(ua) {
var imgFile = ua.dpr === 1 ? 'image.png' : 'image@2x.png';
// ···
});
flashТип: {String|undefined}.
Версия Adobe Flash. undefined, если Flash недоступен.
videoТип: {Boolean}.
Значение true, если видео поддерживается.
svgТип: {Boolean}.
Значение true, если SVG поддерживается.
widthТип: {Number}.
Ширина рабочей области экрана в пикселях.
heightТип: {Number}.
Высота рабочей области экрана в пикселях.
landscapeТип: {Boolean}.
Значение true при горизонтальной ориентации.
dom блока uaЭлемент служит для дополнения базовой БЭМ-сущности блока ua набором модификаторов на основе данных, собранных блоком ua на touch-уровне.
Это позволяет учитывать особенности мобильного устройства, проверяя наличие и значение модификаторов.
modules.define('ios-test', ['i-bem-dom', 'ua'], function(provide, bemDom, Ua) {
provide(bemDom.declBlock(this.name, {
onSetMod: {
js: {
inited: function() {
this.findParentBlock(Ua).hasMod('platform', 'ios') &&
this.setMod('ios');
}
},
'ios': function() {
console.log('You are iOS user');
}
}
}));
});
Элемент автоматически подключается с блоком page. Не требуется подключать его вручную, если в проекте используется page.
Значения всех модификаторов элемента, кроме orient, устанавливаются в момент инициализации блока и остаются неизменными.
platformДопустимые значения: 'ios', 'android', 'bada', 'wp', 'other'.
Способ использования: JS.
Модификатор указывает мобильную платформу пользовательского устройства.
ios – iOS.android – Android.bada – Bada OS.wp – Windows Phone.other – все остальные мобильные платформы.browserДопустимые значения: 'opera', 'chrome'.
Способ использования: JS.
Модификатор указывает тип мобильного браузера.
opera – Opera.chrome – Chrome.iosДопустимые значения: '8', '7' ...
Способ использования: JS.
Модификатор указывает версию операционной системы для устройств iOS.
ios-subversionДопустимые значения: '81', '80' ...
Способ использования: JS.
Модификатор указывает подверсию операционной системы для устройств iOS. Номер подверсии состоит из номера версии и первого символа после разделителя. Номер указывается без символов-разделителей '.'. Например, для iOS версии 8.1.3 значением модификатора будет '81'.
androidДопустимые значения: '4', '3' ...
Способ использования: JS.
Модификатор указывает версию операционной системы для устройств Android.
screen-sizeДопустимые значения: 'large', 'normal', 'small'.
Способ использования: JS.
Модификатор указывает размер экрана пользовательского устройства.
large – размер экрана больше 320 px.normal – размер экрана равен 320 px.small – размер экрана меньше 320 px.svgДопустимые значения: 'yes', 'no'.
Способ использования: JS.
Модификатор указывает на наличие у пользовательского устройства поддержки формата SVG.
yes – поддержка SVG присутствует.no – поддержка SVG отсутствует.orientДопустимые значения: 'landscape', 'portrait'.
Способ использования: JS.
Модификатор указывает текущую ориентацию устройства.
landscape – горизонтальная ориентация.portrait – вертикальная ориентация.Значение модификатора изменяется динамически при смене ориентации устройства. Поэтому можно подписываться на изменение значения модификатора:
modules.define('inner', ['i-bem-dom', 'ua'], function(provide, bemDom, Ua) {
provide(bemDom.declBlock(this.name, {
onSetMod: {
js: {
inited: function() {
this._ua = this.findParentBlock(Ua);
this
._events(this.ua)
.on({ modName : 'orient', modVal : '*' }, this._onOrientChange, this);
this.setMod('orient', this._ua.getMod('orient'));
}
},
'orient': {
'portrait': function() {
this._reDraw('portrait');
},
'landscape': function() {
this._reDraw('landscape');
}
}
},
_onOrientChange: function(e, data) {
// переключаемся между значениям собственного модификатора `orient`
this.setMod(data.modName, data.modVal);
},
_reDraw: function(orient) {
// обновляем содержимое контейнера `inner` при смене ориентации устройства
console.log(orient);
bemDom.update(this.domElem, orient);
}
}));
});
В примере блок-контейнер inner, вложенный в page, подменяет свое содержимое при смене ориентации устройства.