window.open新建空白窗口动态写入xml示例

window.open新建空白窗口动态写入xml:

var win = window.open("");
win.document.write("<xml><item><name>木子屋</name><url>http://www.mzwu.com/</url></item></xml>");
win.document.close();

这段代码能在新窗口中写入xml字符,但IE9、Firefox10、Chorme17都将它当成普通的html文档来解析,不能对xml节点进行展开与收缩。

我想问题的关键是脚本没有告诉浏览器文档类型为text/xml,让浏览器误以为是普通的text/html文档,那怎么告诉浏览器文档类型呢?想起了document.open有个mimetype参数,修改后代码如下:

var win = window.open("");
var doc=win.document.open("text/xml");
doc.write("<xml><item><name>木子屋</name><url>http://www.mzwu.com/</url></item></xml>");
doc.close();

问题依旧,什么原因呢?翻看《JavaScript权威指南》第四版,在P636中对mimetype参数说明如下:

引用内容 引用内容
一个可选的字符串参数,指定了要写入document并显示出来的数据的类型。该参数的值应该是浏览器可以识别的标准MIME类型之一(在Netscape中即"text/html"、"text/plain、"text/gif""image/jped"和"image/x-bitmap"),或者是安装到浏览器上的某种插件可以处理的MIME类型。如果省略了这个参数,它的默认值是"text/html"。IE3将忽略这个参数,它总是假定文档的类型是"text/html"。W3C DOM标准中的Document.open()方法不支持该参数。

看来document.open(mimetype)也行不通,最终折衷解决方法:

window.open("data:text/xml,"+encodeURIComponent("<xml><item><name>木子屋</name><url>http://www.mzwu.com/</url></item></xml>"));

测试结果:IE9无法显示、Chorme17中文会乱码、Firefox10显示正常。



参考文章

[1].Writing an E4X XML primitive to a new window shows as text/html
[2].How to write an E4X XML primitive to a new text/xml window in Mozilla?
[3].write xml to a new window

评论: 0 | 引用: 0 | 查看次数: 5573
发表评论
登录后再发表评论!