oAutoPagerizeの紹介ページ

id:amatanoyoが英語圏向けのoAutoPagerize紹介ページを作ってくれ、en.opera-wikiにoAutoPagerizeの紹介記事書いてる。 - あまたの何かしら。
id:edvakfが良い感じに編集してくれました。

http://en.opera-wiki.com/oAutoPagerize

で、それをid:amatanoyoが日本語版も用意してくれたので、少し手を入れてみました。

http://ja.opera-wiki.com/oAutoPagerize

結果的に、AutoPagerize(本家含めても)の解説ページとしてはかなり良い感じに仕上がったと思います(あ、まだ追記予定のところはいくつかありますが)。
ちなみに、AutoPagerizeと書いているところは共通の仕様、oAutoPagerizeと書いているところはoAutoPagerize独自ってあたりを意識していますが、その辺をもう少しわかりやすく編集して行きたいなとか考えています。


個人の趣味でやっているので、なかなかこういうところに手が回らないので、すごく助かります。
amatanoyo++
edvakf++

Google Chrome 2.0.170のGreasemonkeyとoAutoPagerizeについて

Google Chrome 2.0.170から、Greasemonkey(というか、UserScriptsって言うべきか)の実装が変わり、oAutoPagerizeが動かなくなっていたので修正しました。本体、SITEINFO(必要であればSettingsも)全て更新の必要があります。
oAutoPagerize - 0xFF


以下、中の話。
今までは各スクリプトがグローバルスコープで実行されていましたが、2.0.107から各Scriptごとにスコープが作られるようになって、FirefoxGreasemonkeyの実装に近くなりました。
Firefox版でいうunsafeWindowとして、contentWindow というグローバルオブジェクトが用意されています。(例えば、ページがjQueryを使っていた場合、 window.jQuery は undefined で、代わりに contentWindow.jQuery で参照できます)(あえて、unsafeという名前にしなていないようなので、安全なんだろうと思います。)

ただ、ひとつ問題があって、Firefox版ではwindowは各Scriptで共有されていてるのですが、Google Chromeではwindowも独立しています。例えばあるScriptがAutoPagerizeと連携したい場合は window.AutoPagerize経由でやり取りすることができるのですが、これができません。

なので、oAutoPagerize では contenWindow 経由で Script同士の値の共有をするように修正しました。
このあたり、また実装が変わりそうなので、気がついたら適宜対応していきます。

いつの間にか、windowは共有されるようになったみたいです。

oAutoPagerize ver1.2.2

更新はoAutoPagerize - 0xFFからどうぞ。
また、面倒なSITEINFOの更新にはWindows用 oAutoPagerize, xLDRizeのSITEINFOの更新バッチ - 0xFFをどうぞ。


# AutoPagerizeが発生させるイベント周りについて書くべきことがあるんだけど、まだまとまってないので後で書く。

oAutoPagerize ver 1.2

今回のアップデートからOpera 9.50で追加された機能を使用しているため、9.50より前のバージョンをサポートしなくなります。
その分軽量化しているのでご了承ください(9.50より前のバージョン用のファイルも置いてあります)。

更新内容は、

更新はoAutoPagerize - 0xFFからどうぞ。
また、面倒なSITEINFOの更新にはWindows用 oAutoPagerize, xLDRizeのSITEINFOの更新バッチ - 0xFFをどうぞ。

今後の方針

現状のソースだと、外から弄ったり、他のScriptとの連携がし難いので、少し設計から見直すかもしれません。

おまけ

Safari3の判定コード。

var isSafari = window.getMatchedCSSRules && typeof CharacterData != 'function';

まず、window.getMatchedCSSRules で Safari3 か Google Chrome と判断。
さらに、Google Chromeは typeof CharacterData を function と返すので、これを利用しています。Data と あるように、Chrome 以外のブラウザは object (もしくは undefined )です。
Google Chrome は CharacterData の以外にも、いくつかの Global プロパティを function で持っています。将来的に object になる可能性もありますが、現状はこれで Chrome を判定するのが手軽みたいです。

safariとchromeの判別 « kuによると、上記のケースでは typeof CharacterData != 'function'の代わりに window.execScript が使えるみたいです。ただ、window.execScript は IE にもあるので、単体で使う場合は注意が必要です。

おまけ2

Chromium snapshots の build number を XPathGraph っておきました。

oAutoPagerize ver 1.1.3

今回もマイナーなアップデートです。

  • 右上のデフォルトサイズがデカイという話をちょくちょく目にしたので、16pxから10pxに変更しました。16のままが良いという方は、0AutoPagerize.Settings.jsのほうで調整していただくのがベターです。
  • (Bookmarkletで使えるように)Firefox3でも動くように地味な修正
  • CodeRepos版はArray#forEach(Opera9.5以降)などを使用して少しだけ高速化。
  • GreaseKit/Greasemetal版をOpera版と同じバージョンに更新

以上です。
更新は、oAutoPagerize - 0xFFからどうぞ。

SafariでoAutoPagerizeが動かなくなっていた件

コメント欄で報告もらって(soh335も)、*1とりあえず、Windows版Safariでチェックしてみたら確かにoAutoPagerizeが動かない。。
SITEINFOのURLをひとつにまとめていたところで、正規表現が長すぎるというエラーが出てました。高速化優先で色々試していたのが仇になってしまいました。。
とりあえず、修正して置いたのでSafariの方はUPDATEしてみてください。 oAutoPagerize - 0xFF

にゃんさん、ご報告ありがとうございました。

macbookは今週末には直して、Safari版もちゃんとします。たぶん。。

*1:macbook壊れたまま放置してたのを思い出しつつ

oAutoPagerize ver 1.1.2

何度も更新して恐縮ですが、9.5xでiframe方式を使用するとページ上でのキーやマウスによる操作を受け付けなくなる現象が発生したので修正を行いました*1

例によって、更新はoAutoPagerize - 0xFFからどうぞ。

更新が連続したので、これでしばらく落ち着く予定です。その間に、(9.5用の)細かいチューニングをCodeReposにコミットして行こうと思います。

*1:iframe内でBeforeScript、BeforeExternalScriptをpreventDefaultしていたのが不味かったようなのですが、9.2xでは問題なかったので、なにか仕様がかわったんでしょうか。。