#javascript #xml #google-chrome #google-chrome-extension #xmlhttprequest
#javascript #xml #google-chrome #google-chrome-extension #xmlhttprequest запрос #xmlhttprequest
Вопрос:
Вау, да, сумасшедшее название.
Но если серьезно, у меня небольшая дилемма, я пытаюсь работать над расширением Chrome, которое очень просто принимает вывод XML из скрипта на сервере и отображает его в приятном виде.
вот результат XML
<foo>
<level>3</level>
<message>
No Additional Information
</message>
</foo>
В принципе, все, что мне нужно сделать, это ввести условный оператор для каждого уровня и отобразить сообщение. Однако у меня, похоже, возникают проблемы с тем, чтобы XHR вообще работал.
У моего файла манифеста есть разрешения для файла XML и всего домена, в котором он размещен (в данный момент для целей отладки).
Прошло много времени с тех пор, как я работал с javascript, и все кардинально изменилось. Также не помогает то, что я списываю расширение, написанное для Firefox, чтобы выполнить работу.
Есть мысли?
Редактировать:
Чтобы уточнить, что я в порядке с инструкциями if, которые мне нужны, и на самом деле инициирование XHR должно быть в порядке, моя проблема заключается в манипулировании данными из XML-файла.
Ответ №1:
Когда вы извлекаете свой XML-файл с помощью XMLHttpRequest (XHR), вы можете указать, каким будет ответ на запрос от using responseXML
. Ответ будет проанализирован так, как если бы это был текстовый / xml-поток.
Результатом responseXML
будет объект DOM Document. Вы можете использовать любой JavaScript API в разделе document.* такой как document.getElementById
, document.querySelector
и т.д. Все они определены в ссылке на документ выше.
Если ваш responseXML
возвращает null, это означает, что сервер выдает неправильный mimetype. Вы можете переопределить mimetype с помощью overrideMimeType before calling
send()`.
Например
(Синхронный XHR, вы также можете сделать асинхронным, указав onreadystatechange):
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/db.xml');
xhr.overrideMimeType('text/xml');
xhr.send(null)
var root = xhr.responseXML;
var someidDOM = root.getElementById('someid');
Помните, чтобы это сработало, вы должны поместить этот код на фоновую страницу и предоставить разрешение на доступ к этому ресурсу. Шаблонами соответствия, которые вы можете использовать, может быть сам URL:
{
// Required
"name": "My Extension",
"version": "1.0",
"background_page": "background.html",
"permissions": [ "http://example.com/db.xml" ]
}
Надеюсь, это поможет вам начать!