2017-01-28 3 views
0

[изменить: добавить более подробную информацию о сценарии]Есть ли способ выгрузить обработчик событий, созданный с помощью window.addEventListener?

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

Я могу выгрузить все события ввода хоста приложения, за исключением, когда приложение регистрирует событие в окне с помощью захвата, следующим образом:

window.addEventListener("mousedown", (e) => console.log("hi"), true); 

Есть ли способ для моего инструмента, чтобы ввести функцию, звонит до этого?

+0

Можете ли вы уточнить, что вы пытаетесь сделать? Мне было непонятно, почему вы не можете просто вызвать свою «введенную» функцию в функции обратного вызова до «console.log». – mrlew

+0

Уверенная вещь; Я пишу инструмент, который приложение javascript может включать в себя через тег . Этот инструмент обеспечивает наложение над приложением путем добавления холста к DOM. Я хотел бы, чтобы инструмент мог перехватывать все входные события до того, как приложение получило их, чтобы, если пользователь нажимает на одну из отображаемых кнопок в наложении, я могу отменить распространение. Однако, если приложение регистрирует событие в окне с использованием захвата, я не могу понять, как «попасть в начало» обратного вызова приложения. (edit: для ясности - в этом случае это приложение-хозяин, добавляющее вышеприведенное событие, а не мой инструмент) –

ответ

1

Нет. Если на этапе захвата был подключен прослушиватель событий на этапе window, у него нет возможности получить других слушателей. Это связано с тем, что window будет первым узлом, который будет уведомлен о любых событиях, а слушатели запускаются в том порядке, в котором они были добавлены. (Я предполагаю, что это было сделано намеренно у дизайнера инструмента, который вы используете. Не очень удобен для пользователей, IMO.)

Единственный способ обойти это было бы, если бы у вас была ссылка на связанный функция, и в этом случае вы можете использовать removeEventListener, добавить своего собственного слушателя, а затем повторно связать оригинал. Однако это вряд ли возможно в вашем коде.

+0

Да, не вариант в моем коде; но ясность вокруг невозможности полезна. Отмечая это как ответ, пока кто-то не придумает невозможный ответ :). спасибо! –

1

Вам нужно, чтобы один из ваших тегов скриптов отображался первым на странице, в идеале в <head>. Затем вы сначала присоедините своего слушателя.

+0

Спасибо - я не могу контролировать, где приложение хоста включает скрипт, но я могу предоставить это руководство разработчикам, включая скрипт. –

Смежные вопросы