OperaのXPathについてのバグ(は9.50で修正されます)
はてなブックマーク - ku0522のブックマーク - 2008年4月6日に気が付いたけど、肝心のquaaさんの記事が消えているので補足エントリーを書いておきます。
Opera9.50"以前"でのバグ
動的に作成したDocumentでevaluateしたとき、XPath関数を使うと元のDocumentの要素・属性を取得してしまう。
具体的には下記のコードで、Opera9.2xはobject HTMLParagraphElementをalertしてしまう(Opera以外はnull)。
//Thx! id:quaa <!DOCTYPE html> <html> <head> <title>id() test</title> </head> <body> <p id="aaa">a</p> <script> var doc = document.implementation.createDocument("", "test", null); //XPathEvaluatorとコンテキストノードがdocumentじゃなくdocなので何も取得できないはず… alert(doc.evaluate('id("aaa")/.', doc, null, 9, null).singleNodeValue); </script> </body> </html>
id関数を始めcontainsとかが諸々ダメで、OperaでAutoPagerizeを動かす際にネックになってました。これを回避するために、oAutoPagerizeではiframeを使用しています。
で、このバグはOpera9.50では修正されていています。どのBuildで修正されたのか把握してないのですが、2008/04/06時点で最新の9.50 beta Build 9864では問題ありませんでした。(oAutoPagerizeも9.50だったらiframe使わないようにしてみようかな)
なお、id("aaa")ではなくid("aaa")/.となっているのは、id関数のみのXPathだと要素を取得できないという別のバグのため。こちらも9.50では修正されています。
ちなみに、Safari3.04についてもid関数についてバグがあったんですが3.1で修正されているそうです。
Safari 3 の XPath のバグ: Days on the Moon