2012-01-02 2 views
9

Я пишу FireFox-Extension и хочу загрузить данные с сервера. Но когда я пытаюсь инициализировать XMLHttpRequest с:XMLHttpRequest в Firefox Extension

var request = new XMLHttpRequest(); 

Консоль ошибок говорит:

ReferenceError: XMLHttpRequest is not defined 

Должен ли я включить что-то или почему XMLTttpRequest не признается?

+1

Является ли ваш код внутри модуля JavaScript? Если это так, посмотрите на https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Using_XMLHttpRequest_from_JavaScript_modules_.2F_XPCOM.C2.A0компоненты –

+0

Привет, Феликс! Я использую его в main.js внутри функции. Но когда я делаю это по-своему, разработчик надстроек говорит, что «файл xpi не может быть скопирован» ... – SteMa

+0

Вы используете новый аддон SDK? Если так, я еще не работал с этим, поэтому я не могу вам помочь. Сожалею. –

ответ

10

Дополнительный SDK (который используется косвенно через Add-on Builder) содержит request package, который по существу является оберткой вокруг XMLHttpRequest, вы должны использовать его. Насколько я понимаю, вам не предоставляется прямой доступ для предотвращения проблем, если надстройка удалена/отключена во время выполнения запроса.

1

Кажется, что ответ Владимира полезен для большинства таких случаев. Но есть еще один случай.

Я нашел трис- страницу, пытаясь решить проблему с этой ошибкой при Firefox 16. Странно, но я никогда не видел эту ошибку под Firefox 15.

Я получил эту ошибку в скрипте содержимого на страниц. Сценарий был введен в начале:

contentScriptWhen : "start", 

Похоже, что в некоторых случаях объект окна не был инициализирован правильно. Итак, я только что сменил загрузку скриптов от начала и до конца. Это было возможно в моем случае. Проблема исчезла ...

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

3

Для использования XMLHttpRequest конструктор следует добавить конструктор XPCOM компонент:

const XMLHttpRequest = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1", "nsIXMLHttpRequest"); 

и после того, как:

// some code 
var req = new XMLHttpRequest(); 
// some code 

Более подробную информацию о MDN

Смежные вопросы