Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.03.2012, 01:07
Новичок на форуме
Отправить личное сообщение для alexey980 Посмотреть профиль Найти все сообщения от alexey980
 
Регистрация: 06.02.2012
Сообщений: 6

проигрывание флэш на странице блокирует события документа
взять тот же youtube. при нажатии play на видеоролике документ теряет фокус и никак не реагирует на нажатие клавиш. горячие клавиши типа ctrl+t окна браузера (например, Firefox) тоже не работают. приходится вручную кликать в свободной области документа, чтобы вернуть фокус. после этого документ снова реагирует на события. можно-ли как-то обойти этот флэш-баг с помощью javascript? хочу сделать небольшой скрипт для greasemonkey.
Ответить с цитированием
  #2 (permalink)  
Старый 09.03.2012, 02:22
Новичок на форуме
Отправить личное сообщение для alexey980 Посмотреть профиль Найти все сообщения от alexey980
 
Регистрация: 06.02.2012
Сообщений: 6

пока удалось продвинуться вот насколько:
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 флэш-объекта, то обработчик события не срабатывает.
Ответить с цитированием
  #3 (permalink)  
Старый 09.03.2012, 12:28
Новичок на форуме
Отправить личное сообщение для alexey980 Посмотреть профиль Найти все сообщения от alexey980
 
Регистрация: 06.02.2012
Сообщений: 6

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);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск