26

XMLHttpRequest を使用して Web ページ (タグ スープ HTML) をダウンロードしています。出力を取得して、XPATH クエリを実行できる DOM オブジェクトに変換したいと考えています。文字列から DOM オブジェクトに変換するにはどうすればよいですか?

一般的な解決策は、非表示の iframe を作成し、文字列の内容をそこにスローすることです。text/html をサポートするようにDOMParserを更新するという話がありましたが、Firefox 3.0.1 の時点では、試してみるとまだエラーが発生します。NS_ERROR_NOT_IMPLEMENTED

非表示の iframe トリックを使用する以外にオプションはありますか? そうでない場合、コードが現在開いているタブのコンテキスト外で動作するように iframe トリックを実行する最良の方法は何ですか (タブを閉じてもコードが台無しにならないようにするためなど)?

これは、iframe ハック以外の解決策を探している理由の例です。堅牢な解決策を得るためにそのすべてのコードを作成する必要がある場合は、何か他のものを探し続けたいと思います。

4

5 に答える 5

10

Ajaxian は、今日、iframe からの html の挿入/取得に関する投稿を実際に行いました。彼らがそこに投稿したjsスニペットをおそらく使用できます。

ブラウザー/タブを閉じる処理については、 onbeforeunload ( http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx ) イベントにアタッチして、必要なことを何でも実行できます。 .

于 2008-08-06T20:37:32.260 に答える
6

これを試して:

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

overrideMimeTyperesponseXMLに注意してください。
readyState == 4完了」です。

于 2008-08-06T19:13:13.930 に答える
2

div を作成してみる

document.createElement( 'div' );

そして、タグスープ HTML を div の innerHTML に設定します。ブラウザーはそれを XML に処理する必要があり、それを解析できます。

innerHTML プロパティは、テキストと要素の有効な組み合わせを指定する文字列を取ります。innerHTML プロパティが設定されている場合、指定された文字列がオブジェクトの既存のコンテンツを完全に置き換えます。文字列に HTML タグが含まれている場合、文字列はドキュメントに配置されるときに解析され、書式設定されます。

于 2008-08-06T19:59:50.997 に答える
1

javascript を使用して Web ページを XML オブジェクトとしてダウンロードしたいが、Web ページを使用したくないですか? ユーザーが何をするか (タブやウィンドウを閉じるなど) を制御できないため、OSX ダッシュボード ウィジェットまたは別のアプリケーションのようにこれを行う必要があります。ユーザーがブラウザーを閉じることを心配する必要がない限り、Firefox 拡張機能も機能します。

于 2008-08-06T20:22:10.543 に答える
1

非表示の iframe トリックを使用する以外にオプションはありますか?

残念ながら、今ではありません。それ以外の場合は、指定した microsummary コードが代わりにそれを使用します。

そうでない場合、コードが現在開いているタブのコンテキスト外で動作するように iframe トリックを実行する最良の方法は何ですか (タブを閉じてもコードが台無しにならないように)?

引用したコードは最近のブラウザー ウィンドウを使用しているため、タブを閉じても解析には影響しません。そのブラウザー ウィンドウを閉じるとロードが中止されますが、対処することはできます (たとえば、ロードが中止されたことを検出し、別のウィンドウで再起動する)。頻繁には発生しません。

iframe が適切に機能するには DOM ウィンドウが必要なので、現時点では明確な解決策はありません (mozilla パーサーの使用に熱心な場合)。

于 2008-08-12T18:56:54.637 に答える