Firefox3beta4とAutoPagerize0.0.24で起きる問題の修正patch

よくわかんないけどp.innerHTMLに代入したときに中にbodyinnerHTMLが全部入るみたいなへんなことになってた。Twitter / みずも: AutoPagerizeのせいというよりはグリースモンキーのせいだな とも書かれてるけど、原因は調べてない。なんとなくinnerHTML使わないでDOMで書き直したら正しく動いた。

追記

id:flagmeisterさんにrange.createContextualFragmentinnerHTMLが怪しいって教えていただきました。

ネームスペース付きで操作するの、やりかたしらないのでまちがってたらすいません。
はじめsetAttributeNS(HTML_NAMESPACE, ...)にしたらなんかリンクになってくれなかったのでsetAttributeに変えました。

--- autopagerize.user.orig.js   2008-03-11 20:04:34.000000000 +0900
+++ autopagerize.user.js        2008-03-11 20:03:47.000000000 +0900
@@ -273,8 +273,14 @@
     var self = this
     this.insertPoint.parentNode.insertBefore(hr, this.insertPoint)
     this.insertPoint.parentNode.insertBefore(p, this.insertPoint)
-    p.innerHTML = 'page: <a class="autopagerize_link" href="' +
-        this.requestURL + '">' + (++this.pageNum) + '</a>'
+    this.insertPoint.parentNode.insertBefore(document.createTextNode("page: "), this.insertPoint)
+
+    var a = document.createElementNS(HTML_NAMESPACE, 'a')
+       a.appendChild( document.createTextNode((++this.pageNum)) );
+       a.setAttribute('class', 'autopagerize_link');
+       a.setAttribute('href', this.requestURL);
+    this.insertPoint.parentNode.insertBefore(a, this.insertPoint)
+
     return page.map(function(i) {
         var pe = document.importNode(i, true)
         self.insertPoint.parentNode.insertBefore(pe, self.insertPoint)
Greasemonkey以外のふつうのスクリプトでもこのinnerHTMLがらみで問題が出てるようなので、けっきょくbeta3にもどしました。beta4ははずれってことで。5に期待。

About this entry