AutoPagerizeをFirefox3で動かそうとしたときにつまったポイント

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を作った