Подтвердить что ты не робот

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

Я загружаю веб-страницу (тег супа HTML) с помощью XMLHttpRequest и хочу получить выходные данные и превратить их в объект DOM, с помощью которого я могу затем выполнять запросы XPATH. Как мне преобразовать строку в объект DOM?

Похоже, что общим решением является создание скрытого iframe и добавление в него содержимого строки. Там было говорить об обновлении DomParser поддерживать текст /HTML, а как в Firefox 3.0.1 вы все еще получаете NS_ERROR_NOT_IMPLEMENTED, если вы попробуете.

Есть ли вариант, кроме использования скрытого трюка iframe? И если нет, как лучше всего выполнить трюк iframe, чтобы ваш код работал вне контекста любых открытых в данный момент вкладок (чтобы закрывающие вкладки не испортили код и т.д.)?

Это пример того, почему я ищу решение, отличное от взлома iframe, если мне нужно написать весь этот код, чтобы иметь надежное решение, то я бы предпочел продолжать искать что-то другое.

4b9b3361

Ответ 1

Аяксиан на самом деле имел сообщение о вставке/извлечении html из iframe сегодня. Вероятно, вы можете использовать фрагмент js, который они разместили там.

Что касается обработки закрытия браузера/вкладки, вы можете подключиться к событию onbeforeunload (http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx) и делать все, что вам нужно сделать.

Ответ 2

Попробуй это:

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;
    }
}

Обратите внимание на overrideMimeType и responseXML.
readyState == 4 "завершено".

Ответ 3

Попробуйте создать div

document.createElement( 'div' );

И затем установите тег суп HTML в innerHTML div. Браузер должен обработать это в XML, который затем можно проанализировать.

Свойство innerHTML принимает строку который указывает действительную комбинацию текст и элементы. Когда innerHTMLсвойство задано, данная строка полностью заменяет существующие содержимое объекта. Если строка содержит теги HTML, строка анализируется и форматируется по мере его размещения в документ.

Ответ 4

Итак, вы хотите загрузить веб-страницу как объект XML с помощью javascript, но вы не хотите использовать веб-страницу? Поскольку у вас нет контроля над тем, что сделает пользователь (закрытие вкладок или окон или еще чего-то), вам нужно будет сделать это как виджет OSX Dashboard или какое-то отдельное приложение. Расширение Firefox также будет работать, если вам не нужно беспокоиться о том, что пользователь закрывает браузер.

Ответ 5

Есть ли опция, кроме использования скрытого трюка iframe?

К сожалению, нет, не сейчас. В противном случае микросуммарный код, на который вы указываете, будет использовать его вместо этого.

И если нет, как лучше всего сделать трюк iframe, чтобы ваш код работал вне контекста любых открытых в данный момент вкладок (чтобы закрывающие вкладки не испортили код и т.д.)?

Код, который вы указали, использует последнее окно браузера, поэтому закрытие вкладок не повлияет на разбор. Закрытие этого окна браузера прервет вашу нагрузку, но вы можете справиться с ним (обнаружите, что загрузка отменена и перезапустите ее в другом окне, например), и это происходит нечасто.

Вам нужно окно DOM для правильной работы iframe, поэтому на данный момент нет чистого решения (если вы хотите использовать анализатор mozilla).