Как обнаружить нажатую клавишу выхода в видео на Youtube? - PullRequest
6 голосов
/ 10 ноября 2011

Странный вопрос, это будет, но здесь идет.У меня есть страница, на которой я показываю фотографию в большом формате, например лайтбокс.При нажатии ESC я закрываю страницу и возвращаю пользователя на страницу, с которой он пришел, где отображаются фотографии в обычном формате:

$(document).keyup(function(e) {
 if (e.keyCode == 27) {
    var closeURL = $('.close').attr('href');
        window.location = closeURL;
 }
});

Однако на той же странице лайтбокса также есть боковая панель, котораяможет содержать встроенные Youtube видео.Пользователи могут увеличить это видео до полного экрана, используя стандартные элементы управления видео проигрывателя Youtube.Если пользователь нажмет ESC в этом сценарии, он закроет полноэкранное видео и вернется на страницу лайтбокса (стандартное поведение встроенного проигрывателя, чего я и хочу), однако событие клавиши ESC тогда также вызывает моеКод keyup, закрывающий лайтбокс, нежелателен в данном конкретном сценарии.

Я обнаружил, что это происходит в Chrome, но не в Firefox.По сути, я хочу, чтобы мой код ESC не срабатывал при нажатии ESC, чтобы закрыть проигрыватель Youtube, и при этом он срабатывал только тогда, когда пользователи нажимают ESC при просмотре фотографии (а не видео).

Я изучал event.target, чтобы различать эти сценарии, но пока не повезло.Есть идеи?

Обновление: Я собираюсь сейчас принять эту ошибку только для Chrome.Тем не менее, открыт для решений.

Ответы [ 4 ]

1 голос
/ 11 ноября 2011

Я не верю, что это будет возможно. Проигрыватель Flash захватывает ввод, когда он сфокусирован - например, если вы нажмете кнопку воспроизведения на видео YouTube, а затем нажмете Ctrl-W, чтобы закрыть вкладку, она не закроется, пока вы не нажмете страницу за пределами видео, возвращая фокус на браузер.

Управление вводом эффективно передается другому процессу (проигрывателю Flash), пока он находится в фокусе, поэтому вы не сможете захватывать ввод или действовать на него, пока пользователь явно не вернет управление браузеру.

1 голос
/ 27 февраля 2012

Просто наткнулся на это .. Я знаю, что это немного устарело, но есть возможное решение (потребует больше работы) ...

Вы можете обернуть проигрыватель YouTube в свой собственный флэш-плеер (используяAPI или просто контейнер) и обнаружить нажатие клавиш во флэш-памяти.Затем вы можете вызывать ту же функцию javascript непосредственно из вашего приложения Flash, так что не имеет значения, на какой странице или в приложении Flash находится фокус, всегда будет выполняться сценарий, который вы хотите запустить.

1 голос
/ 10 ноября 2011

Может быть, что-то подобное сработает:

$(document).not("iframe").keyup(...
0 голосов
/ 03 августа 2015

Это можно сделать, определив состояние воспроизведения видео, а затем вернув фокус обратно в окно.

Flash Player для Youtube API устарел, поэтому вам следует использовать IFrame API.

Вы можете использовать событие onStateChange, чтобы обнаружить состояние 1 (playing), а затем просто позвонить:

`$(window).focus()`    (jQuery syntax)

Это позволит вам использовать keyup событие. Убедитесь, что вы используете window, а не document для вызова focus().

Вот раздел событий в документации.

https://developers.google.com/youtube/iframe_api_reference#Events

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...