Как обнаружить мышь, входить и выходить из окон Firefox с помощью кода расширения JavaScript

Я создаю расширение Firefox и не могу найти способ получения указателей мыши и событий отпускания мыши, когда указатель мыши перемещается из окна в окно.

Сначала я объясню, что делает расширение, чтобы прояснить точную ситуацию, потому что детали могут иметь значение. Когда пользователь хочет узнать о "термине" (слово, фраза, аббревиатура) в браузере Firefox, он перемещает указатель мыши на этот термин и приостанавливает указатель мыши над этим термином.

Код расширения javascript вызывает window.open() для отображения небольшого всплывающего окна без полей (которое похоже на всплывающую подсказку) чуть выше термина. Это "окно разъяснения" объясняет и описывает термин в одной строке текста.

Если пользователь хочет уточнить термин в этом "окне уточнения", он просто перемещает и останавливает указатель мыши над этим термином. Это отображает другое "окно разъяснения" чуть выше первого "окна разъяснения" с информацией об этом втором члене. Очевидно, что расширение javascript code выполняется в "окнах разъяснения" в дополнение к основному окну браузера firefox.

Чтобы исчезло "окно разъяснения", пользователь просто перемещает указатель мыши за пределы этого окна.

Для правильной работы расширения код JavaScript должен получать события, когда указатель мыши выходит из одного окна и входит в другое. Это то, что я не смог заставить работать должным образом.

Код расширения javascript вызывает любую из следующих пар строк:

1: window.addEventListener("mouseover", meanings.onmouseover, true);
1: window.addEventListener("mouseout", meanings.onmouseout, true);

2: window.document.documentElement.addEventListener("mouseenter", meanings.onmouseenter, false);
2: window.document.documentElement.addEventListener("mouseleave", meanings.onmouseleave, false);

Когда я включаю первую пару событий, создается впечатление, что создается слишком много событий, а события.target, event.currentTarget, event.relatedTarget кажутся различными узлами элемента в документе, что бесполезно, потому что мы заботимся только о перемещение между окнами, а не между элементами на странице.

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

Кроме того, свойство event.relatedTarget всегда имеет значение null - оно не содержит окна или документа, в котором указатель мыши перемещен в "mouseenter", или окна или документа, в котором указатель мыши перемещен из "mouseleave".

Я не могу поверить, сколько времени я потратил на это, так как это должно быть общей потребностью или требованием во многих приложениях. Тем не менее, я колеблюсь, пытаясь найти подход, который работает.

Как я могу достичь того, что мне нужно?

0 ответов

Другие вопросы по тегам