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

  • Tutorial
Как известно, в 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) на случай изменения этой оценки.

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 49

    +9
    Дни Firefox на хабре
      +10
      Дни файрмицгола на хабре
        +8
        Я подумал и решил, что три отдельные блогозаписи уместнее, чем одна «сборная солянка».
      +3
      Эээ, зачем?
      «У Вас садится батарейка, для просмотра видео подключите зарядное устройство»
        +16
        Сам спросил, сам ответил.
          +3
          А чем плохи системные уведомления? Все-таки аккумулятор большей частью относится к компьютеру, а не к браузеру.
            0
            например, в веб-приложении можно отключить какой-то не особо нужный функционал, или таймеры переставить и т.п.
              +3
              Разве что проигрывание видео или аудио. Потому что все эти таймеры так мало влияют на батарейку, по сравнению с самим браузером и всевозможными модными баннерами на HTML5+CSS3
              • UFO just landed and posted this here
          +22
          Battery API + Geolocation API = контекстная реклама «найти ближайшую халявную розетку»
            +3
            а я бы не отказался) а то как-то в питере пришлось с полчаса в центре побегать, прежде чем нашлась кафешка с розеткой…
            +3
            Думайте про веб-приложения. Можно предупредить пользователя, что у него батарейка сейчас сядет, надо закругляться, сохранить результаты работы, выключить полноэкранное видео и так далее.
              +3
              Думайте о пользователе. Ему система будет пикать/моргать/уведомлять каждые пять минут, а тут ещё и веб приложение.
                –1
                Что ему система пикать будет? Какая система? Мне «Мак» ничего не пикает, только аккумулятор краснеет. И табличка появляется один раз за 10 минут до выключения.
                  –1
                  кроме «Мак»ов ещё смартфоны всякие есть, и для них даже есть мобильный FF
                    0
                    Конечно есть, у меня на «Андроиде» (Google Nexus One) ничего вообще не пикает.
                  0
                  Ну так приложение не только моргать сможет, но и сохранить черновичок, или, например, уведомить работающих с человеком в одной среде «такой-то может нас скоро покинуть потому, что у него садится батарея».
              +10
              Теперь можно косвенно определить за каким девайсом сидит человек за десктопом или ноутом. Ждем более точный таргетинг рекламы ноутбуков и условно-бесполезную статистику заряженности девайсов.
              Фича довольно-таки полезная: для эмуляторов рабочего стола можно показывать заряд батареи и статус заряда. Можно понижать качество анимаций если заряд батареи низкий.

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

                    Возможность записи в navigator.battery.level была бы очень интересна… :)
                      +6
                      Можно было бы открыть онлайн сервис по зарядке батарей? :)
                        +7
                        Вот тебе и передача энергии по интернету
                        wnd1.navigator.battery.level += wnd2.navigator.battery.level;
                          +8
                          Это не передача уже, а нарушение закона сохранения энергии.
                      0
                      Тогда даешь API для управления производительностью браузера, иначе большого смысла от API Battery не вижу(кроме уведомлений для юзера)… или я уже опаздал?
                        +8
                        А чего мелочится? Весь /proc (или аналог) засунуть в navigator, типа:
                        /proc/cpuinfo → navigator.cpuinfo
                        /proc/meminfo → navigator.meminfo
                        Сразу будет ясно — имеет-ли смысл тяжелый алгоритм грузить, если процессор слабый.
                          0
                          Так процессор может быть и не слабый, но нагружен чем-то еще. Тут уж лучше произвести замер производительности на каком-то типовом куске и из него тогда понять чего дальше грузить. Да и в процессе работы можно корректировки вносить на основании замеров времени выполнения.
                            +2
                            Опять же движение браузеров в сторону вытеснения ОС как таковых.
                            0
                            Жаль /proc не везде есть, под что firefox собран.
                              0
                              Судя по комментариям, вариант что это был сарказм вообще не рассматривался :)
                              0
                              Вот у меня сейчас показывает частоту 800 МГц на каждом ядре, а может разогнаться при необходимости до 2700. Не решит ли ваш скрипт, что у меня машина слабая?
                                0
                                На сколько я помню, в cpuinfo показывается номинальная частота.
                                  +1
                                  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
                                    упс, сорри за оверквотинг…
                                      0
                                      Хм, учтём. Видимо виноват чёртов режим perfomance по умолчанию в убунте.
                                0
                                > Оба свойства — только для чтения.
                                Жаль.
                                  –2
                                  Блин, я всегда буду читать комментарии перед отправкой, я всегда буду читать комментарии перед отправкой.
                                  +1
                                  Извините, но Файрфокс что — особенный? Просто в других браузерах сие АПИ тоже будет доступно же.
                                    0
                                    Когда будет доступно — приходите, сможете поведать и про них. Пока же пишу про один только Firefox, ибо в нём реализация ужé готова чуть более, чем наполовину. Причём это главная половина: без оценки по времени можно и обойтись.
                                    –3
                                    В W3C окончательно выжили из ума
                                      +4
                                      Согласен, совершенная чушь. Никакое веб-приложение не должен волновать уровень батареи. Если уж говорить об уменьшении количества запросов для обновления и прочей ерунды которая, якобы может увеличить время работы. то логичнее вводить режим экономии энергии, а не выносить это решение на уровень конкретного приложения.
                                        +1
                                        Добавка акселерометра в мобильные браузеры, например, была использована в играх. Современны браузер — это платформа. А задача платформы — предоставить API. И пусть уже конкретное [веб]приложение пусть решает что с ним делать.
                                          0
                                          Юзкейсы бывают разные, может мне жизненно необходима работа веб-приложения в одной вкладке без всяких оптмизаций павера, а другое мне нужно только при работе от сети 220 вольт. Предлагаемые API gjpdjkz.n 'ne ghj,ktve htibnm? ysyt ceotcnde.obt — njkmrj hexrfvb/
                                        +1
                                        Мне кажется, они идиоты. Приведите реальный юзкейс для этой штуки? Сообщить о том, что батарейка садится, и надо бы сохранить документы, вполне может операционная система (более того, это именно ее обязанность). И более того, непонятно, что, все разработчики прилоежний должны теперь утяжелять свое приложение кодом обработки этого события? Зачем?

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

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

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

                                        Only users with full accounts can post comments. Log in, please.