Как я могу превратить строку HTML в объект DOM в расширении Firefox?
Я загружаю веб-страницу (тег супа HTML) с помощью XMLHttpRequest и хочу взять выходные данные и превратить их в объект DOM, с помощью которого я могу затем выполнять запросы XPATH. Как мне преобразовать строку в объект DOM?
Похоже, что общим решением является создание скрытого iframe и добавление в него содержимого строки. Говорили об обновлении DOMParser для поддержки text/html, но с Firefox 3.0.1 вы все еще получаете NS_ERROR_NOT_IMPLEMENTED
если вы попытаетесь.
Есть ли вариант, кроме использования скрытого трюка iframe? И если нет, как лучше всего выполнить трюк iframe, чтобы ваш код работал вне контекста любых открытых в данный момент вкладок (чтобы закрывающие вкладки не испортили код и т. Д.)?
Это пример того, почему я ищу решение, отличное от взлома iframe, если мне нужно написать весь этот код, чтобы иметь надежное решение, то я бы предпочел продолжать искать что-то другое.
5 ответов
Сегодня у Ajaxian была запись о вставке / извлечении 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;
}
}
Обратите внимание на overrideMimeType и responseXML.
readyState == 4
выполнен'.
Попробуйте создать div
document.createElement( 'div' );
А затем установите тег супа HTML на innerHTML элемента div. Браузер должен обработать это в XML, который затем можно проанализировать.
Свойство innerHTML принимает строку, которая определяет допустимую комбинацию текста и элементов. Когда свойство innerHTML установлено, данная строка полностью заменяет существующее содержимое объекта. Если строка содержит HTML-теги, она анализируется и форматируется по мере ее помещения в документ.
Итак, вы хотите загрузить веб-страницу в виде объекта XML с использованием javascript, но не хотите использовать веб-страницу? Поскольку у вас нет контроля над тем, что будет делать пользователь (закрытие вкладок, окон или чего-либо еще), вам нужно будет сделать это, как виджет OSX Dashboard или какое-то отдельное приложение. Расширение Firefox также будет работать, если вам не нужно беспокоиться о закрытии браузера пользователем.
Есть ли вариант, кроме использования скрытого трюка iframe?
К сожалению, нет, не сейчас. В противном случае код микросуммы, на который вы указываете, использовал бы его вместо этого.
И если нет, как лучше всего выполнить трюк iframe, чтобы ваш код работал вне контекста любых открытых в данный момент вкладок (чтобы закрывающие вкладки не испортили код и т. Д.)?
Код, который вы цитировали, использует последнее окно браузера, поэтому закрытие вкладок не повлияет на синтаксический анализ. Закрытие этого окна браузера прервет вашу загрузку, но вы можете справиться с этим (обнаружить, что загрузка прервана и, например, перезапустить ее в другом окне), и это происходит не очень часто.
Вам нужно окно DOM для правильной работы iframe, поэтому в настоящее время нет чистого решения (если вы заинтересованы в использовании парсера Mozilla).