我现在正在编写 Firefox 4 引导扩展。
以下是我的故事:
当我使用@mozilla.org/xmlextras/xmlhttprequest;1, nsIXMLHttpRequest时,req.responseText可以成功加载目标 URL 的内容。
我通过 createElement 方法和 innerHTML 属性将 responseText 解析为 DOM 为 BODY 元素。
一切似乎都很成功。
但是,字符编码( charset )存在问题。
因为我需要扩展检测目标文档的字符集,用 text/html覆盖Mine 类型的请求;charset=blahblah.. 似乎不能满足我的需要。
我已经尝试过@mozilla.org/intl/utf8converterservice;1, nsIUTF8ConverterService,但似乎 XMLHTTPRequest 没有 ScriptableInputStream 甚至没有任何 InputStream 或可读流。
我不知道以合适的自动检测字符集读取目标文档内容,无论是 GUI 中的自动检测字符编码功能还是在内容文档的头部元标记处读取的字符集。
编辑:如果我将包括 HTML、HEAD、BODY 标记在内的整个文档解析为 DOM 对象,但不加载像 js、css、ico 文件这样的大量文档,这是否实用?
编辑: MDC 上标题为“ HTML 到 DOM ”的文章上的方法使用@mozilla.org/feed-unescapehtml;1,nsIScriptableUnescapeHTML是不合适的,因为它解析了很多错误,并且baseURI的错误不能设置为文本/html。A Elements 中的所有属性 HREF 在包含相对路径时都会丢失。
编辑#2:如果有任何方法可以将传入的 responseText 转换为可读的 UTF-8 字符集字符串,那仍然会很好。:-)
任何解决编码问题的想法或工作都值得赞赏。:-)
PS。目标文档是通用的,因此没有特定的字符集(或 ... preknown),当然不仅仅是默认定义的 UTF8。
支持:
到目前为止,我有两个解决这个问题的简要主要想法。
任何人都可以帮助我解决 XPCOM 模块和方法的名称吗?
在将内容解析为 DOM 时指定字符集。
我们首先需要知道文档的字符集(通过提取头部元标记或标题)。然后,
- 找出在解析正文内容时可以指定字符集的方法。
- 找出一种可以同时解析头部和身体的方法。
要将传入的 responseText转换或制作为 UTF-8,因此使用默认字符集 UTF-8 解析为 DOM 元素仍然有效。
X 似乎不实用也不明智:用 charset 覆盖 Mine 类型是这个想法的一种实现,但我们不能在发起请求之前预先知道 charset。