私たちは JavaScript ベースの GIS アプリケーションを開発していますが、誰かが IE9 を起動して、そこでも試してみるまで、すべてが順調に進んでいました。おそらくすでにご想像のとおり、アプリが故障しました。
何らかの不可解な理由で、for..in
ループを反復できないことが判明しましたchildNodes
:
var xmldoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
xmldoc.loadXML("<i18n><item>one</item><item>two</item></i18n>");
var currentItem = xmldoc.getElementsByTagName("i18n")[0].firstChild;
while (currentItem) {
if (currentItem.nodeType == 1) {
for (var i in currentItem.childNodes) {
console.log(currentItem.childNodes[i]);
}
}
currentItem = currentItem.nextSibling;
}
ただし、上記のコードの内部for
ループを次のように置き換えると、
for (var j = 0; j < currentItem.childNodes.length; j++) {
console.log(currentItem.childNodes[j]);
}
すべてが期待どおりに機能します-問題なく子ノードをウォークします。
回避策を見つけましたが、この問題が発生する理由が明確でないため、依然としてこの問題に悩まされています。XMLDocumentとfor..inの両方の MSDN ドキュメントには、何も言及されていません。
これはバグなのか、それとも IE で有名な文書化されていない奇妙さの別のケースなのか?