因程式Bug搞出一個包含無效元素名稱的XML,發現IE的反應很有趣,XML物件的firstChild屬性會傳回null。

XML規格,XML元素名稱必須符合以下條件:

  • 包含字母、數字及其他字元
  • 不可以數字或標點符號起始
  • 開頭不可以是xml, XML或Xml
  • 不能包含空白

我寫了個範例挑戰了這個禁忌,順手試了一下不合法XML格式在各瀏覽器下的反應。

var xmlStr ="<data><0>A</0></data>";
var xd = null;
if (window.ActiveXObject) {
    xd = new ActiveXObject("Microsoft.XMLDOM");
    xd.async = false; xd.loadXML(xmlStr);
}
else if (typeof DOMParser != "undefined")
    xd = new DOMParser().parseFromString(xmlStr, "text/xml");
var elem = xd.firstChild;
if (elem == null) 
    alert("firstChild is null");
else
    alert(elem.xml || (new XMLSerializer()).serializeToString(elem));

【測試結果】

IE:
傳回null

Firefox:
得到<?xml-stylesheet href="chrome://global/locale/intl.css" type="text/css"?>

Chrome/Safari:
<data><parsererror xmlns="http://www.w3.org/1999/xhtml" style="display: block; white-space: pre; border: 2px solid #c77; padding: 0 1em 0 1em; margin: 1em; background-color: #fdd; color: black"><h3>This page contains the following errors:</h3><div style="font-family:monospace;font-size:12px">error on line 1 at column 8: StartTag: invalid element name
</div><h3>Below is a rendering of the page up to the first error.</h3></parsererror></data>

Opera:
<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">Error<sourcetext>Unknown source</sourcetext></parsererror>

本次最人性化回應獎,我決定頒給Chrome/Safari~~


Comments

Be the first to post a comment

Post a comment