Firefox3beta4とAutoPagerize0.0.24で起きる問題の修正patch
よくわかんないけどp.innerHTMLに代入したときに中にbodyのinnerHTMLが全部入るみたいなへんなことになってた。Twitter / みずも: AutoPagerizeのせいというよりはグリースモンキーのせいだな とも書かれてるけど、原因は調べてない。なんとなくinnerHTML使わないでDOMで書き直したら正しく動いた。
id:flagmeisterさんにrange.createContextualFragmentとinnerHTMLが怪しいって教えていただきました。
2008-03-02 - flagmeisterの日記
bugzillaに報告してみました。 - flagmeisterの日記
ネームスペース付きで操作するの、やりかたしらないのでまちがってたらすいません。 はじめ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に期待。