Я загружаю веб-страницу (HTML-теги супа) с XMLHttpRequest, и я хочу получить результат и превратить его в объект DOM, на котором я затем могу запускать запросы XPATH. Как преобразовать строку в объект DOM?
Похоже, что общее решение - создать скрытый iframe и бросить в него содержимое строки. Было разговаривать обновления DOMParser для поддержки text / html, но с Firefox 3.0.1 вы все равно получите NS_ERROR_NOT_IMPLEMENTED, если попытаетесь.
Есть ли какой-нибудь вариант, кроме использования трюка со скрытым iframe? А если нет, то как лучше всего использовать трюк с iframe, чтобы ваш код работал вне контекста любых открытых в данный момент вкладок (чтобы закрытие вкладок не испортило код и т. д.)?
Этот - это пример того, почему я ищу решение, отличное от взлома iframe, если мне нужно написать все этот код, чтобы получить надежное решение, я бы предпочел продолжить поиск чего-то другого.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуй это:
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-тег супа на внутренний HTML-код div. Браузер должен преобразовать это в XML, который затем можно будет проанализировать.
The innerHTML property takes a string that specifies a valid combination of text and elements. When the innerHTML property is set, the given string completely replaces the existing content of the object. If the string contains HTML tags, the string is parsed and formatted as it is placed into the document.
Проблема в том, что мне нужен весь HTML-документ,
and all which this would throw away. Also I'm trying to not use existing windows / tabs because my code runs outside the context of them and I want to be resistant to a user randomly closing a window or tab making my code get interrupted (assuming Firefox is still running).Итак, вы хотите загрузить веб-страницу как объект XML с помощью javascript, но не хотите использовать веб-страницу? Поскольку у вас нет контроля над тем, что будет делать пользователь (закрытие вкладок, окон или чего-то еще), вам нужно будет сделать это как виджет OSX Dashboard или какое-то отдельное приложение. Расширение Firefox также будет работать, если вам не нужно беспокоиться о том, что пользователь закроет браузер.
Да, я использую расширение Firefox, но в большинстве примеров iframe используется произвольное окно браузера, а не объект в основном процессе, чтобы быть устойчивым к закрытию браузера / вкладок.
Сегодня у Ajaxian действительно был сообщение о вставке / извлечении html из iframe. Вероятно, вы можете использовать фрагмент js, который они там разместили.
Что касается обработки закрытия браузера / вкладки, вы можете присоединиться к событию onbeforeunload (http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx) и делать все, что вам нужно.
Is there any option besides using the hidden iframe trick?
К сожалению, нет, не сейчас. В противном случае код микросводки, на который вы указываете, будет использовать его вместо этого.
And if not, what is the best way to do the iframe trick so that your code works outside the context of any currently open tabs (so that closing tabs won't screw up code, etc)?
В приведенном вами коде используется последнее окно браузера, поэтому закрытие вкладок не повлияет на синтаксический анализ. Закрытие этого окна браузера прервет вашу загрузку, но вы можете справиться с этим (например, обнаружить, что загрузка прервана, и перезапустить ее в другом окне), и это происходит не очень часто.
Вам нужно окно DOM для правильной работы iframe, поэтому на данный момент нет чистого решения (если вы заинтересованы в использовании парсера Mozilla).
Это не работает, если ответ изначально не является допустимым XML. Если вы скажете Firefox ожидать XML, он будет строго придерживаться того, что он будет анализировать.