Как я могу превратить строку HTML в объект DOM в расширении Firefox?
-
08-06-2019 - |
Вопрос
Я загружаю веб-страницу (HTML-тег-суп) с XMLHttpRequest, и я хочу взять выходные данные и превратить их в объект DOM, к которому затем можно будет выполнять запросы XPATH.Как преобразовать строку в объект DOM?
Похоже, что общее решение состоит в том, чтобы создать скрытый iframe и бросить в него содержимое строки.Было разговаривать обновления DOMParser для поддержки text/html, но начиная с Firefox 3.0.1 вы все равно получаете NS_ERROR_NOT_IMPLEMENTED
Если вы пытаетесь.
Есть ли какой-либо вариант, кроме использования скрытого трюка iframe?А если нет, то как лучше всего проделать трюк с iframe, чтобы ваш код работал вне контекста любых открытых в данный момент вкладок (чтобы закрытие вкладок не испортило код и т. д.)?
Этот это пример того, почему я ищу решение, отличное от взлома iframe, если мне нужно написать все если этот код имеет надежное решение, то я предпочитаю продолжать искать что-то другое.
Решение
У Аяксиана действительно был сообщение о вставке/извлечении HTML из iframe сегодня.Вероятно, вы можете использовать фрагмент js, который они там разместили.
Что касается обработки закрытия браузера/вкладки, вы можете прикрепить к onbeforeunload (http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx) событие и делайте все, что вам нужно.
Другие советы
Попробуй это:
var request = new XMLHttpRequest();
request.overrideMimeType( 'text/xml' );
request.onreadystatechange = process;
request.open ( 'GET', url );
request.send( null );
function process() {
if ( request.readyState == 4 && request.status == 200 ) {
var xml = request.responseXML;
}
}
Обратите внимание на переопределитьMimeType и ответXML.
А readyState == 4
выполнен'.
Попробуйте создать div
document.createElement( 'div' );
А затем установите HTML-тег супа на внутренний HTML-код div.Браузер должен преобразовать это в XML, который затем можно проанализировать.
Когда установлено свойство Innerhtml, данная строка полностью заменяет существующий содержимое объекта.Если строка содержит теги HTML, строка анализируется и отформатируется по мере ее помещения в документ.
Итак, вы хотите загрузить веб-страницу как объект XML с помощью JavaScript, но не хотите использовать веб-страницу?Поскольку у вас нет контроля над тем, что будет делать пользователь (закрытие вкладок, окон и т. д.), вам нужно будет сделать это как виджет панели управления OSX или какое-то отдельное приложение.Расширение Firefox также будет работать, если только вам не придется беспокоиться о том, что пользователь закроет браузер.
Есть ли какой-либо вариант, кроме использования скрытого трюка iframe?
К сожалению, нет, не сейчас.В противном случае вместо него будет использоваться код микросводки, на который вы указываете.
А если нет, то как лучше всего проделать трюк с iframe, чтобы ваш код работал вне контекста любых открытых в данный момент вкладок (чтобы закрытие вкладок не испортило код и т. д.)?
Код, который вы процитировали, использует последнее окно браузера, поэтому закрытие вкладок не повлияет на анализ.Закрытие этого окна браузера прервет вашу загрузку, но вы можете справиться с этим (например, обнаружить, что загрузка прервана, и перезапустить ее в другом окне), и это происходит не очень часто.
Для правильной работы iframe вам нужно окно DOM, поэтому на данный момент нет чистого решения (если вы заинтересованы в использовании парсера Mozilla).