Хобрук: Ваш путь к мастерству в программировании

Создание кнопки XUL дает код отказа компонента

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

Чтобы выполнить 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(), обратитесь к моему предыдущему вопросу.


Ответы:


1

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

30.01.2011
  • Я попробую это и отправлю исправленную версию, но она должна будет пройти своевременную редакционную процедуру. Можете ли вы уточнить, почему это вызывает проблему? 30.01.2011
  • Однако я бы не ожидал, что это решит проблему. Удаленный XUL был отключен в Firefox 4.0, и я подозреваю, что это то, что здесь происходит: bugzilla .mozilla.org/show_bug.cgi?id=546857 30.01.2011
  • Я думаю ты прав. Отчет об ошибке ссылается на другой, где в этом сообщении конкретно указано: В настоящее время, если кто-то пытается создать XUL-элемент, мы просто терпят неудачу и выдаем ошибку. Странно: на одной машине работает, а на другой нет. Что дает? 30.01.2011

  • 2

    Использование пространства имен 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() в первую очередь? Я обнаружил некоторую несовместимость между использованием этого метода и надстройками, отслеживающими нажатие на документ. Отправка события напрямую обходит это.

    14.02.2011
    Новые материалы

    #093 | Моделирование вспышки эпидемии с помощью JavaScript — Часть 3
    TLDR: Я сделал симуляцию вспышки эпидемии, в которую можно поиграть здесь . Мой холст, моя сцена Мой HTML — это всего лишь один div с классом stage, и вот как я настроил на нем свой объект..

    numberToString.js (8kyu 16)
    Алгоритм кодовых войн Проблема Нам нужна функция, которая может преобразовать число в строку. 숫자를 문자열로 변환하는 함수를 작성해라. Решение 01 function numberToString(n) { return n.toString(); }..

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

    Использование данных из Adobe Analytics в предложениях Adobe Target
    Я уверен, что все видели эти всплывающие окна в интернет-магазинах, которые говорят что-то вроде « 15 человек просматривают этот товар прямо сейчас! » или « 105 человек из Мичигана купили это..

    Машинное обучение и его набор данных в CreateML
    Когда я впервые начал учиться в Apple Developer Academy, у меня был момент неуверенности в моем интересе к машинному обучению. Нужно ли мне сменить карьеру моей мечты с специалиста по данным на..

    Обучение требует воли
    Недавно я прочитал отличную статью Шейна Легга и Джоэла Венесса из DeepMind. http://arxiv.org/pdf/1109.5951v2.pdf В статье «универсальный интеллект» агента π определяется как: Поэтому..

    Безопасность по дизайну делает всех счастливыми
    Заложенная безопасность делает всех счастливыми Если вы никогда не смотрели Louis C.K. рассказать о том, как Все удивительно, и никто не счастлив ; побаловать себя. Сделайте это прямо..