Как я могу превратить строку HTML в объект DOM в расширении Firefox?

StackOverflow https://stackoverflow.com/questions/3868

  •  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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top