Я разрабатываю аддон Firefox, используя addon-sdk. Этот аддон добавляет пункт меню в контекстное меню, и пользователь может щелкнуть правой кнопкой мыши по любому элементу управления, чтобы активировать этот пункт меню. После активации он показывает небольшое всплывающее окно с предложениями, когда пользователь вводит что-то.
Все работает хорошо, кроме Gmail.
В Gmail код ниже не работает.
self.port.on('showPopup', function(data) {
var active = document.activeElement;
console.log(active.type);
if (active && getWordUnderCaret(active).word == data.input) {
populateSuggestions(data);
positionPopup(active);
stylePopup();
}
});
Причиной отказа является document.activeElement
указывает на document.body
, а getWordUnderCaret
терпит неудачу, поскольку он ожидает ввода /textarea. Это хорошо работает во всех других местах. Я не уверен, почему он указывает на document.body
, поскольку я вижу, что основное внимание уделяется управлению вводом. Ввод document.activeElement
в консоли Firebug дает мне правильный объект.
В качестве альтернативы я попытался отслеживать активный элемент самостоятельно, а не использовать document.activeElement
. Но я столкнулся с такими проблемами, как упорство в этом. Я не могу использовать window
, чтобы сохранить это, поскольку window
является прокси-сервером. Я попытался с unsafeWindow
, но не смог заставить его работать.
Мне интересно, почему это не удается в Gmail? Любая помощь, чтобы исправить это было бы здорово!
Мой код доступен в Github
Edit
Похоже, это проблема с addon-sdk. Я создал Gist, который можно использовать для воспроизведения проблемы. Он доступен здесь