Я думаю о том, чтобы сделать собственное дополнение для Firefox и провести несколько экспериментов с функциональностью, которую я мог бы добавить в него.
Пока я просто проверяю осуществимость, я только что получил скелет, созданный из компоновщика дополнений Mozilla, и начал работать над ним. Сейчас я пытаюсь отправить события щелчка мышью или нажатия клавиши.
Я перепробовал доступные способы отправки события, но почему-то он не работает для ключевых событий
Я попробовал это с помощью dispatchEvent:
onMenuItemCommand: function(e) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var evt1 = document.createEvent("MouseEvents");
evt1.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
//it's returning me null for document.getElementById... so I changed it.
var cb1 = gBrowser.selectedBrowser.contentDocument.getElementById("strict");
var canceled1 = !cb1.dispatchEvent(evt1);
var evt = document.createEvent("KeyEvents");
evt.initKeyEvent("keydown", true, false, window,
false, false, false, false, 0x42, 0);
var cb = gBrowser.selectedBrowser.contentDocument.getElementById("filter");
var canceled = !cb.dispatchEvent(evt);
if(canceled)
{
// A handler called preventDefault
alert("canceled");
}
else
{
// None of the handlers called preventDefault
alert("not canceled");
}
}
Когда я попробовал этот код в Firefox, он обновил флажок, который означает, что событие нажатия работало, но ничего не произошло в текстовом поле, где я ожидал, что он напечатает символ. Но он показал окно с предупреждением «не отменено», доказывающее, что событие не было отменено!
Поскольку событие не было отменено, я решил добавить обработчик нажатой клавиши в window.document ... и он вызывался, когда дополнение отправляло эти события! Это означает, что события генерируются, а также кипят.
Тогда почему работают только события мыши, а ключевые события - нет? Я что-то здесь упускаю?
(Я также пробовал sendKeyEvent с nsIDOMWindowUtils. Мне все еще не повезло.)
Кстати, я использую Firefox 3.6.15 с Gecko: 1.9.2.15