Greasemonkeyスクリプトを書くひとはこのへんを注意するといいと思います。
ほとんどDOM関連なのでGreasemonkeyに限った話じゃないかも。
- 異るドキュメントのノードをappendChildしたりinsertBeforeしたい場合は、一旦importNodeをしてから実行する
htmlDoc.documentElement.appendChild(fragment)
↓
htmlDoc.documentElement.appendChild(htmlDoc.importNode(fragment, true))
fragmentがhtmlDocに属していなかったので、htmlDocにimportNodeしてからappendChildするようにした。
参考: Textノードを追加できない - DOSEI日記 http://d.hatena.ne.jp/DOSEI/20071013/p1
- document.evaluateのdocumentは第2引数のノードが属しているドキュメントを使わないとエラーになる。
var node = node || document var nodesSnapshot = document.evaluate(xpath, node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
↓
var node = node || document var doc = node.ownerDocument ? node.ownerDocument : node var nodesSnapshot = doc.evaluate(xpath, node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
第2引数のnodeのownerDocumentを確認して、それが取れた場合はそれのevaluateを使うようにした。
- document.implementation.createDocumentの挙動がちょっと変ったっぽい
- Firefox2のときはDOMでaのhrefを取ったときにURLが取得できていた
- Firefox3だと属性値がそのまま返ってきて、URLになっていない
- htmlのドキュメントとして扱われていない?
- Firefox2のときのようにする方法は分ってない。createDocumentType?
- とりあえず、AutpPagerizeではlocationからURLを適当に取ってURLを作った