Анализировать вывод XML с помощью Javascript для расширения Chrome?

#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" ]
}
  

Надеюсь, это поможет вам начать!