私は今、Firefox4のブートストラップされた拡張機能を書いています。
以下は私の話です:
@ mozilla.org / xmlextras / xmlhttprequest; 1、nsIXMLHttpRequestを使用している場合、ターゲットURLのコンテンツをreq.responseTextで正常にロードできます。
createElementメソッドとinnerHTMLプロパティを使用してresponseTextをDOMに解析し、BODY要素にしました。
すべてが成功しているようです。
ただし、文字エンコード(charset)には問題があります。
拡張機能が必要なため、ターゲットドキュメントの文字セットを検出し、Mineタイプのリクエストをtext/htmlでオーバーライドします。charset =blahblah..私のニーズを満たしていないようです。
@ mozilla.org / intl / utf8converterservice; 1、nsIUTF8ConverterServiceを試しましたが、XMLHTTPRequestにはScriptableInputStreamがなく、InputStreamや読み取り可能なストリームさえないようです。
GUIでの文字エンコードの自動検出の機能や、コンテンツドキュメントのヘッドメタタグで読み取られた文字セットに関係なく、適切な自動検出された文字セットでターゲットドキュメントのコンテンツを読み取ることについてはわかりません。
編集: HTML、HEAD、BODYタグを含むドキュメント全体をDOMオブジェクトに解析し、js、css、icoファイルなどの広範なドキュメントを読み込まない場合は実用的でしょうか?
編集:@ mozilla.org / feed-unescapehtml;1を使用している「HTMLtoDOM」というタイトルのMDCの記事のメソッド、 nsIScriptableUnescapeHTMLは多くのエラーで解析され、baseURIのタイプで設定できないため不適切です。 text/html。相対パスが含まれている場合、A要素のすべての属性HREFが失われます。
編集#2:着信responseTextを読み取り可能なUTF-8文字セット文字列に変換できるメソッドがあればそれでもいいでしょう。:-)
エンコーディングの問題を解決するためのアイデアや作業は大歓迎です。:-)
PS。ターゲットドキュメントはユニバーサルであるため、特定の文字セット(または... preknown)はなく、もちろん、デフォルトですでに定義されているUTF8だけではありません。
供給:
今まで、私はこの問題を解決するための2つの簡単な主なアイデアを持っています。
誰かが私がXPCOMモジュールとメソッドの名前を理解するのを手伝ってくれるでしょうか?
コンテンツをDOMに解析するときに文字セットを指定します。
最初にドキュメントの文字セットを知る必要があります(ヘッドメタタグまたはヘッダーを抽出することによって)。それで、
- 本文の内容を解析するときに文字セットを指定できるメソッドを見つけてください。
- 頭と体の両方を解析できる方法を見つけてください。
着信responseTextをUTF -8に変換または作成して、デフォルトの文字セットUTF-8を使用してDOM要素に解析することは引き続き機能します。
Xは実用的で賢明ではないようです:Mineタイプをcharsetでオーバーライドすることはこのアイデアの実装ですが、リクエストを開始する前にcharsetを事前に知ることはできません。