Как я могу превратить строку HTML в объект DOM в расширении Firefox? - PullRequest
20 голосов
/ 06 августа 2008

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

Похоже, что общим решением является создание скрытого фрейма и добавление в него содержимого строки. Прошло разговоров об обновлении DOMParser для поддержки text / html, но в Firefox 3.0.1 вы все равно получите NS_ERROR_NOT_IMPLEMENTED, если попытаетесь.

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

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

Ответы [ 5 ]

7 голосов
/ 07 августа 2008

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

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

4 голосов
/ 06 августа 2008

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

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 «завершен».

1 голос
/ 12 августа 2008

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

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

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

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

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

1 голос
/ 07 августа 2008

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

1 голос
/ 06 августа 2008

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

document.createElement( 'div' );

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...