Создание кнопки XUL дает «код ошибки компонента» - PullRequest
0 голосов
/ 30 января 2011

Я один из разработчиков TryAgain, надстройки Firefox, которая отображает пользовательскую страницу с ошибкой, когда веб-сайт не загружается.По сути, он заменяет Firefox netError.xhtml настроенной версией.

Чтобы выполнить JavaScript из кода расширения в netError.xhtml, я добавил элемент XUL <command> на страницу ошибки следующим образом:

var increment_btn = doc.
    createElementNS(
        "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
        "xul:command"
    );
increment_btn.setAttribute("id", "errorIncrement");
increment_btn.setAttribute("oncommand", "autoRetryThis();");
div.appendChild(increment_btn);

Всякий раз, когда нужно выполнить autoRetryThis(), я просто запускаю doCommand() для элемента.На моей тестовой машине это нормально работает под Firefox 2.0 через 4.0b10.Я получил следующий отчет о проблеме , однако:

Ошибка: компонент возвратил код ошибки: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIDOMHTMLDocument.createElementNS]

Ошибка указывает на первую строку приведенного выше кода.

Если вам интересно, почему я решил создать элемент с помощью createElementNS(), см. Мой предыдущий вопрос .

Ответы [ 2 ]

1 голос
/ 30 января 2011

Удалите xul: из параметра имени createElementNS.

0 голосов
/ 15 февраля 2011

Использование пространства имен XUL устарело. Насколько я понимаю, это означает, что больше нельзя размещать элементы управления XUL и XHTML в одном документе XML.

Мое решение заключалось в том, чтобы вместо этого использовать обычный тег XHTML <button> и вызвать его onclick() слушатель, отправив событие:

try {
    var evt = doc.createEvent('HTMLEvents');
    evt.initEvent('click', false, false);
    btn.dispatchEvent(evt);
} catch (e) {
    btn.click();
}

Почему бы просто не сделать btn.click() во-первых? Я обнаружил некоторые несовместимости между использованием этого метода и надстройками, которые контролировали нажатие на документ. Отправка события напрямую обходит это.

...