проигрывание флэш на странице блокирует события документа
взять тот же youtube. при нажатии play на видеоролике документ теряет фокус и никак не реагирует на нажатие клавиш. горячие клавиши типа ctrl+t окна браузера (например, Firefox) тоже не работают. приходится вручную кликать в свободной области документа, чтобы вернуть фокус. после этого документ снова реагирует на события. можно-ли как-то обойти этот флэш-баг с помощью javascript? хочу сделать небольшой скрипт для greasemonkey.
|
пока удалось продвинуться вот насколько:
function returnfocus (){ var flash = document.getElementsByTagName("embed")[0]; flash.addEventListener('mouseout', function () { document.body.tabIndex = 0; document.body.focus(); }, false); } window.addEventListener('load', returnfocus, false);данный код возвращает документу фокус (а следовательно и возможность использования горячих клавиш), если увести мышь с флэш-объекта. для простоты кода речь пока идёт только о первом флэш-объекте на странице. как бы сделать так, чтобы фокус возвращался не по событию mouseout, а, например, по keydown. если просто засунуть keydown в addEventListener флэш-объекта, то обработчик события не срабатывает. |
nasqad,
спасибо за ссылку. пришлось немного модифицировать для Greasemonkey одно из предложенных там решений. суть приёма в том, чтобы сделать флэш-объект проницаемым, а его родительскому элементу повесить обработчик события click, которым передавать фокус назад документу. муздыхался с добавлением параметра wmode="transparent" к уже существующему флэш-объекту. получилось только через клонирование и замену: function returnfocus (){ var flash = document.getElementsByTagName("embed")[0]; flash.parentNode.addEventListener('click', function () {document.body.tabIndex = 0; document.body.focus();}, false); var cloneFlash = flash.cloneNode(true); cloneFlash.setAttribute('wmode','transparent'); flash.parentNode.replaceChild(cloneFlash,flash); } window.addEventListener('load', returnfocus, false); |
Часовой пояс GMT +3, время: 01:39. |