Переопределение существующего прослушивателя событий нажатия клавиш с помощью пользовательского скрипта ⇐ Jquery
-
Гость
Переопределение существующего прослушивателя событий нажатия клавиш с помощью пользовательского скрипта
Я уже довольно давно пытаюсь переопределить прослушиватель событий на сайте, и у меня возникла проблема с видеоплеером (jwplayer). Ключевые события привязаны и зафиксированы, и их нелегко переопределить.
Вот сценарий:
// ==UserScript== // проверка @name // тест @author // @версия 1.1.5 // @match *://*.example.com/* // @require https://ajax.googleapis.com/ajax/libs/j ... ery.min.js // ==/Пользовательский скрипт== /* глобальные переменные $ */ document.addEventListener('keydown', function(e){ if (e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey) { переключатель (e.keyCode) { случай 37: предупреждение('37'); // Код JQuery для изменения страницы перерыв; случай 39: предупреждение('39'); // Код JQuery для изменения страницы перерыв; } } }, истинный); Тестирование проводится следующим образом:
var script = document.createElement('script'); script.type = 'текст/javascript'; script.src = 'https:// Third-party.example.com/js/jwplayer8/jwplayer.core.controls.html5.js'; document.getElementsByTagName('head')[0].appendChild(скрипт); script.onload = функция() { Оповещение('загружено'); } Элементы управления Jwplayer представляют собой простой переключатель и вызывают те же клавиши, что и я, среди прочего: клавиши 37 и 39. Изменение клавиш, которые я наблюдаю, на что-то другое ничего не меняет.
>
Когда игрок не в фокусе, все работает как положено. Когда проигрыватель запускается и фиксирует нажатие клавиши, это нарушает пользовательский скрипт.
При загрузке страницы скрипт сайта загружается дважды. Сначала открывается диалоговое окно, просто говорящее «загружено», как и должно быть. Однако при второй загрузке диалоговое окно, в котором все еще написано «загружено», теперь имеет заголовок «На странице https:// Third-party.example.com написано:» вместо заголовка, как раньше.
Аналогично, использование сочетаний клавиш Ctrl + Стрелка (влево или вправо) дает идентичные результаты. В предупреждениях указывается либо только «37», либо «39», как и должно быть, а диалоговое окно не имеет заголовка, как и ожидалось.
Однако, как только jwplayer оказывается в фокусе, в диалоговом окне отображается сообщение о загрузке скрипта. Заголовок становится «На странице https:// Third-party.example.com написано:», а затем либо «37», либо «39» в качестве информации внутри.
Мой первоначальный план состоял в том, чтобы просто отключить jwplayer, но учитывая, что предупреждения выполняются правильно, а любой код, следующий за ними, нет, это усложнило задачу.
Я уже довольно давно пытаюсь переопределить прослушиватель событий на сайте, и у меня возникла проблема с видеоплеером (jwplayer). Ключевые события привязаны и зафиксированы, и их нелегко переопределить.
Вот сценарий:
// ==UserScript== // проверка @name // тест @author // @версия 1.1.5 // @match *://*.example.com/* // @require https://ajax.googleapis.com/ajax/libs/j ... ery.min.js // ==/Пользовательский скрипт== /* глобальные переменные $ */ document.addEventListener('keydown', function(e){ if (e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey) { переключатель (e.keyCode) { случай 37: предупреждение('37'); // Код JQuery для изменения страницы перерыв; случай 39: предупреждение('39'); // Код JQuery для изменения страницы перерыв; } } }, истинный); Тестирование проводится следующим образом:
var script = document.createElement('script'); script.type = 'текст/javascript'; script.src = 'https:// Third-party.example.com/js/jwplayer8/jwplayer.core.controls.html5.js'; document.getElementsByTagName('head')[0].appendChild(скрипт); script.onload = функция() { Оповещение('загружено'); } Элементы управления Jwplayer представляют собой простой переключатель и вызывают те же клавиши, что и я, среди прочего: клавиши 37 и 39. Изменение клавиш, которые я наблюдаю, на что-то другое ничего не меняет.
>
Когда игрок не в фокусе, все работает как положено. Когда проигрыватель запускается и фиксирует нажатие клавиши, это нарушает пользовательский скрипт.
При загрузке страницы скрипт сайта загружается дважды. Сначала открывается диалоговое окно, просто говорящее «загружено», как и должно быть. Однако при второй загрузке диалоговое окно, в котором все еще написано «загружено», теперь имеет заголовок «На странице https:// Third-party.example.com написано:» вместо заголовка, как раньше.
Аналогично, использование сочетаний клавиш Ctrl + Стрелка (влево или вправо) дает идентичные результаты. В предупреждениях указывается либо только «37», либо «39», как и должно быть, а диалоговое окно не имеет заголовка, как и ожидалось.
Однако, как только jwplayer оказывается в фокусе, в диалоговом окне отображается сообщение о загрузке скрипта. Заголовок становится «На странице https:// Third-party.example.com написано:», а затем либо «37», либо «39» в качестве информации внутри.
Мой первоначальный план состоял в том, чтобы просто отключить jwplayer, но учитывая, что предупреждения выполняются правильно, а любой код, следующий за ними, нет, это усложнило задачу.
Мобильная версия