Firefox

индекс
178,21

Возьми API, JavaScript; поди узнай скорей-ка, что в Файерфоксе нашем села батарейка!…

Как известно, в W3C идёт работа над черновиком стандарта Battery API, реализация которого позволит джаваскрипту в браузере наблюдать за уровнем заряда аккумуляторной батареи в том мобильном устройстве (мобильнике, планшете, нетбуке, ноутбуке и так далее), на котором браузер запущен.

Речь идёт о появлении объекта navigator.battery со свойствами navigator.battery.charging (логическое; равно true, когда устройство подзаряжается) и navigator.battery.level (число от 0.0 до 1.0, выражающее величину заряда батареи по отношению к максимальному заряду её). Оба свойства — только для чтения. У этого объекта также будут события, позволяющие наблюдать за изменениями состояния батареи примерно так:

navigator.battery.addEventListener('chargingchange', function () {
   if (navigator.battery.charging) {
      console.log('Устройство только что воткнули в розетку.');
   }
}, false);

В конце осени нынешнего (2011) года соответствующий объект (под именем navigator.mozBattery) добавили в объектную модель Файерфокса одиннадцатой версии (см. баг 678694); её появления по графику следует ожидать в середине марта будущего (2012) года, а бету мы увидим в сáмом начале февраля. Жду с нетерпением, потому что мобильный Firefox одиннадцатой версии вообще обещает заблистать множеством изменений по сравнению с десятым.

Подробности о реализации нового объекта изложены в MozillaWiki. Явствует, что спервоначалу событий будет всего два: chargingchange (когда батарейка начинает или, наоборот, перестаёт заряжаться) и levelchange (когда уровень заряда меняется на 1%).

В черновике из W3C ужé запроектированы также два дополнительных свойства (chargingTime и dischargingTime) для оценки предполагаемого времени, остающегося до полного заряда (или критического разряда) аккумулятора, а с ними и события (onchargingtimechange да ondischargingtimechange) на случай изменения этой оценки.
+28
29 декабря 2011, 11:54
29

комментарии (49)

+9
AloneCoder #
Дни Firefox на хабре
+10
Useless_guy #
Дни файрмицгола на хабре
+8
Mithgol #
Я подумал и решил, что три отдельные блогозаписи уместнее, чем одна «сборная солянка».
+3
Ghost_nsk #
Эээ, зачем?
«У Вас садится батарейка, для просмотра видео подключите зарядное устройство»
+16
Mithgol #
Сам спросил, сам ответил.
+3
Sirix #
А чем плохи системные уведомления? Все-таки аккумулятор большей частью относится к компьютеру, а не к браузеру.
0
aleks_raiden #
например, в веб-приложении можно отключить какой-то не особо нужный функционал, или таймеры переставить и т.п.
+3
Sirix #
Разве что проигрывание видео или аудио. Потому что все эти таймеры так мало влияют на батарейку, по сравнению с самим браузером и всевозможными модными баннерами на HTML5+CSS3
+1
Punk_UnDeaD #
Не только видео.
Можно отключить тени, градиенты, анимацию, уменьшить частоту опроса сети.
Всё это богатство в первую очередь «вы можете это использовать», а не «вы обязаны это использовать».
+22
anmipo #
Battery API + Geolocation API = контекстная реклама «найти ближайшую халявную розетку»
+3
EuroElessar #
а я бы не отказался) а то как-то в питере пришлось с полчаса в центре побегать, прежде чем нашлась кафешка с розеткой…
+3
bolk #
Думайте про веб-приложения. Можно предупредить пользователя, что у него батарейка сейчас сядет, надо закругляться, сохранить результаты работы, выключить полноэкранное видео и так далее.
+3
Ghost_nsk #
Думайте о пользователе. Ему система будет пикать/моргать/уведомлять каждые пять минут, а тут ещё и веб приложение.
–1
bolk #
Что ему система пикать будет? Какая система? Мне «Мак» ничего не пикает, только аккумулятор краснеет. И табличка появляется один раз за 10 минут до выключения.
–1
Ghost_nsk #
кроме «Мак»ов ещё смартфоны всякие есть, и для них даже есть мобильный FF
0
bolk #
Конечно есть, у меня на «Андроиде» (Google Nexus One) ничего вообще не пикает.
0
metanol #
Ну так приложение не только моргать сможет, но и сохранить черновичок, или, например, уведомить работающих с человеком в одной среде «такой-то может нас скоро покинуть потому, что у него садится батарея».
+10
azproduction #
Теперь можно косвенно определить за каким девайсом сидит человек за десктопом или ноутом. Ждем более точный таргетинг рекламы ноутбуков и условно-бесполезную статистику заряженности девайсов.
Фича довольно-таки полезная: для эмуляторов рабочего стола можно показывать заряд батареи и статус заряда. Можно понижать качество анимаций если заряд батареи низкий.

В будущем браузер сможет получать практически всю инфрмацию о ПК: кол-во процессоров, температуру устройств, параметры сети www.w3.org/TR/system-info-api/
Вобщем все браузеры(не только хром ос) идут к тому, чтобы заменить оболочку ОС.
+1
x0rHamster #
Кстати, а если это UPS?
+1
VolCh #
«Умные» UPS'ы вроде как прописываются в системе также как батарея ноута. Разве что оставшееся время от балды показывают, но статус зарядка/питание от сети/от аккумулятора показывают. а если упс «тупой» (только 220в на системник подает), то фигли с ним говорить? Просто негде!
0
x0rHamster #
Вот и я про то же. azproduction предложил определять, на ноуте ли идет работа или на десктопе, но что будет, если к десктопу подключен «умный» UPS? В стандарте W3 есть isExternal, но тот ли это атрибут?
0
VolCh #
Я даже не уверен, знает ли ОС о том, является батарея внутренней или внешней. Что уж тут говорить о браузерах.
+1
KawaiDesu #
Не очень меня радует перспектива такой открытости информации о моей системе. И ведь не отключишь так просто.
0
lesha_penguin #
Вы все еще ни разу не собирали firefox из исходников — тогда мы идем к вам ;)
0
lesha_penguin #
Почитал раздел «3. Security and Privacy Considerations» этого System Information API.
Что-то мне подсказывает что как всегда, если эта гадость все-таки появится в браузерах, то «отключалка» будет запрятана где-нибудь в неведомых дебрях джунглей about:config'а.
И надежно «выпилить шпиона» можно будет только при сборке с явным указанием --disable-system-info-api. А то, мне лично, совсем не греет душу наличие аттрибутов macAddress, ipAddress и прочего явного вмешательства в мою частную жизнь.
+31
sndl #
Оба свойства — только для чтения.

Возможность записи в navigator.battery.level была бы очень интересна… :)
+6
frig #
Можно было бы открыть онлайн сервис по зарядке батарей? :)
+7
zim32 #
Вот тебе и передача энергии по интернету
wnd1.navigator.battery.level += wnd2.navigator.battery.level;
+8
StirolXXX #
Это не передача уже, а нарушение закона сохранения энергии.
0
Irker #
Тогда даешь API для управления производительностью браузера, иначе большого смысла от API Battery не вижу(кроме уведомлений для юзера)… или я уже опаздал?
+8
moscow_beast #
А чего мелочится? Весь /proc (или аналог) засунуть в navigator, типа:
/proc/cpuinfo → navigator.cpuinfo
/proc/meminfo → navigator.meminfo
Сразу будет ясно — имеет-ли смысл тяжелый алгоритм грузить, если процессор слабый.
0
frig #
Так процессор может быть и не слабый, но нагружен чем-то еще. Тут уж лучше произвести замер производительности на каком-то типовом куске и из него тогда понять чего дальше грузить. Да и в процессе работы можно корректировки вносить на основании замеров времени выполнения.
+2
Smi1e #
Опять же движение браузеров в сторону вытеснения ОС как таковых.
0
bliznezz #
Жаль /proc не везде есть, под что firefox собран.
0
moscow_beast #
Судя по комментариям, вариант что это был сарказм вообще не рассматривался :)
0
VolCh #
Вот у меня сейчас показывает частоту 800 МГц на каждом ядре, а может разогнаться при необходимости до 2700. Не решит ли ваш скрипт, что у меня машина слабая?
0
KawaiDesu #
На сколько я помню, в cpuinfo показывается номинальная частота.
+1
VolCh #
volch@home:~$ cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 18
model : 1
model name : AMD A4-3400 APU with Radeon(tm) HD Graphics
stepping : 0
cpu MHz : 800.000
cache size : 512 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 6
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid aperfmperf pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt arat npt lbrv svm_lock nrip_save pausefilter
bogomips : 5400.10
TLB size : 1536 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate

processor : 1
vendor_id : AuthenticAMD
cpu family : 18
model : 1
model name : AMD A4-3400 APU with Radeon(tm) HD Graphics
stepping : 0
cpu MHz : 2700.000
cache size : 512 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 6
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid aperfmperf pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt arat npt lbrv svm_lock nrip_save pausefilter
bogomips : 5399.54
TLB size : 1536 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate

volch@home:~$ cpufreq-info
cpufrequtils 007: cpufreq-info © Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
driver: powernow-k8
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 1000 ns.
hardware limits: 800 MHz - 2.70 GHz
available frequency steps: 2.70 GHz, 2.40 GHz, 2.20 GHz, 2.00 GHz, 1.80 GHz, 1.40 GHz, 1.10 GHz, 800 MHz
available cpufreq governors: conservative, ondemand, userspace, powersave, performance
current policy: frequency should be within 800 MHz and 2.70 GHz.
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency is 2.20 GHz.
cpufreq stats: 2.70 GHz:54,02%, 2.40 GHz:2,00%, 2.20 GHz:1,97%, 2.00 GHz:2,22%, 1.80 GHz:5,24%, 1.40 GHz:4,29%, 1.10 GHz:4,52%, 800 MHz:25,75% (24491272)
analyzing CPU 1:
driver: powernow-k8
CPUs which run at the same hardware frequency: 1
CPUs which need to have their frequency coordinated by software: 1
maximum transition latency: 1000 ns.
hardware limits: 800 MHz - 2.70 GHz
available frequency steps: 2.70 GHz, 2.40 GHz, 2.20 GHz, 2.00 GHz, 1.80 GHz, 1.40 GHz, 1.10 GHz, 800 MHz
available cpufreq governors: conservative, ondemand, userspace, powersave, performance
current policy: frequency should be within 800 MHz and 2.70 GHz.
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency is 800 MHz.
cpufreq stats: 2.70 GHz:53,77%, 2.40 GHz:1,91%, 2.20 GHz:1,82%, 2.00 GHz:2,05%, 1.80 GHz:4,94%, 1.40 GHz:3,99%, 1.10 GHz:4,36%, 800 MHz:27,17% (23696740)
volch@home:~$
+1
VolCh #
упс, сорри за оверквотинг…
0
KawaiDesu #
Хм, учтём. Видимо виноват чёртов режим perfomance по умолчанию в убунте.
0
ForhaxeD #
> Оба свойства — только для чтения.
Жаль.
–2
ForhaxeD #
Блин, я всегда буду читать комментарии перед отправкой, я всегда буду читать комментарии перед отправкой.
+1
krovatti #
Извините, но Файрфокс что — особенный? Просто в других браузерах сие АПИ тоже будет доступно же.
0
Mithgol #
Когда будет доступно — приходите, сможете поведать и про них. Пока же пишу про один только Firefox, ибо в нём реализация ужé готова чуть более, чем наполовину. Причём это главная половина: без оценки по времени можно и обойтись.
–3
dmitriid #
В W3C окончательно выжили из ума
+4
shortcaster #
Согласен, совершенная чушь. Никакое веб-приложение не должен волновать уровень батареи. Если уж говорить об уменьшении количества запросов для обновления и прочей ерунды которая, якобы может увеличить время работы. то логичнее вводить режим экономии энергии, а не выносить это решение на уровень конкретного приложения.
+1
general #
Добавка акселерометра в мобильные браузеры, например, была использована в играх. Современны браузер — это платформа. А задача платформы — предоставить API. И пусть уже конкретное [веб]приложение пусть решает что с ним делать.
0
VolCh #
Юзкейсы бывают разные, может мне жизненно необходима работа веб-приложения в одной вкладке без всяких оптмизаций павера, а другое мне нужно только при работе от сети 220 вольт. Предлагаемые API gjpdjkz.n 'ne ghj,ktve htibnm? ysyt ceotcnde.obt — njkmrj hexrfvb/
+1
egorinsk #
Мне кажется, они идиоты. Приведите реальный юзкейс для этой штуки? Сообщить о том, что батарейка садится, и надо бы сохранить документы, вполне может операционная система (более того, это именно ее обязанность). И более того, непонятно, что, все разработчики прилоежний должны теперь утяжелять свое приложение кодом обработки этого события? Зачем?

Экономить батарейку таким образом вряд ли получится, современные движки рендеринга css3 с тенями, скруглениями и градиентами настолько тяжелы, что им ничем не поможешь.

Плюс, под альтернативными платформами усложняется реализация. В Линуксе веть нельзя вызвать функцию getBatteryLevel(), там надо мучаться с дбусами, демонами ACPI, менеджером устройств и прочими компонентами, любой из которых может отсутствовать, быть криво настроен или не работать.

Гораздо полезным событием было бы beforedisconnect/beforeoffline — вызываемое, например после нажатия кнопки засыпания (экран отключается, а у веб-приложения есть пара секунд, чтобы сообщить серверу, что сейчас связь будет разорвана), или при отключении сетевого интерфейса, или при сообщении от модема о том. что на счету заканчиваются деньги, в подобных случаях.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.