oAutoPagerize ver1.5.2

Opera 10.6 (alpha) で oAutoPagerize を動かす - もし高校野球の女子マネージャーがOpera Browserを使ったら - チーム俺等の件と、Yahoo検索でフリーズしてたっぽい問題を修正、ヤフオクとかでも動くようになった、と思う。Google画像検索、英辞郎 on the WEB、NAVERまとめなどでも動くように個別対応。あと、Google動画検索で2ページ目以降にサムネが表示されない問題修正。
NAVERまとめでちょっとバグってたので修正。あと、Google画像検索は左メニューにある顔とか大きさとかの指定が継ぎ足した部分に反映されません。そのうち対応させると思います。
oAutoPagerize - 0xFF

oAutoPagerize ver1.5.1 RC1

Opera10.50 RCが出ましたが、「oAutoPagerizeが原因でフリーズするぞ、どうなってんだ」とのご指摘を頂きましたので、oAutoPagerizeもRC版をリリースしました。
というのも、Googleとか(いろんなサイトで)で落ちるって報告だったんですが、こちらではGoogleで落ちる気配はなく、代わりにAmazonでフリーズしました。で、Amazonではフリーズしないように対応したけど、Googleで落ちる人が落ちなくなったのかは確認できないのでわかりません。というわけで、問題なさそうならこのままで、まだ落ちるような何か対策すると思います(まさにRC版)。ただ、フリーズする原因もはっきりしたわけではないので、対応できるのか…。
ついでに、前回のGoogle画像検索対応をちょっと修正して9.6系でも動くようにしました。SITEINFOをローカルに書かなくしたので保守性もアップ。
更新はいつも通りで。
oAutoPagerize - 0xFF

余談:フリーズするのはOperaのバグなのかoAutoPagerizeのバグなのか?
正直、どっちかわかりません。
なにしろOperaのUserJavaScriptについてOpera: User JavaScript: Taking Controlくらいしかドキュメントを見たことがない(おそらくこれしかない)し、ソースも追えないので、トライアンドエラーしてちゃんと動いてそうなのを探りつつ勘で書いています。だから、もしかしたら間違った使い方をしてしまっているのかもしれない。こういう状況で対応続けるのは相当にマゾですよ。(Opera「まったく新しいエンジンだぞー」UserJS開発者「ぎゃー」)
と、こういうこと書くと、「oAutoPagerizeの更新やーめた」と言い出す前兆なんじゃないかと思われるかもしれないですが*1ChromeがメインになりつつもOperaもよく使っているので、当面サポートは続けます。ただ、Opera用のUserJavaScriptを新たに書くことはまずないだろうと思います。以上、余談でした。

*1:まあ、外れてはないんですが…

oAutoPagerize ver1.5.0

Google画像検索で動かなくなっていたのを修正。
ついでにFirefox3.6でも動くように。Firefoxで使っている人はいないかもしれないけど、Bookmarkletとしても使えるので一応。
あと繰り返しになるけど、Google Chrome4ではoAutoPagerizeは動かないので、Chrome Web Store - AutoPagerizeChrome Web Store - AutoPatchWorkをどうぞ。拡張版の方が断然軽いです。
oAutoPagerize - 0xFF

oAutoPagerize ver1.4.0(Opera UniteのSITEINFOサーバー対応)

oAutoPagerize - 0xFF

Opera Unite で SITEINFO サーバー - もし高校野球の女子マネージャーがOpera Browserを使ったら - チーム俺等のパッチを取り入れました。

SITEINFOサーバーの効果のほどは、0AutoPagerize.SITEINFO.jsとメモリ使用量 - もし高校野球の女子マネージャーがOpera Browserを使ったら - チーム俺等の通りで、体感的にもむしろ速くなるくらい。Opera 10.10をインストールしたら導入をお薦めです。

# なんかUniteはまだ先だろーと思ってたらそろそろリリースされそうですね。
とか言ってたら、ホントにリリースされました。Opera browser | Faster & safer internet | Free download

oAutoPagerize ver1.3.0 (Google Chrome 3用の更新)

Google Chrome 3がリリースされました。
Official Google Blog: Google Chrome after a year: Sporting a new stable release

「新しいタブ」ページのリニューアルしたり、テーマがサポートされたりしています。

が、このバージョンではChrome4以降でoAutoPagerizeが動作しない件 - 0xFFの影響を受けてしまったので、oAutoPagerizeが動かなくなってしまいました。Extensionsが使えれば、「そっちを使ってね」で良かったのですが…。

というわけで、oAutoPagerizeを修正しました。全ファイルの差し替えが必要です。
oAutoPagerize - 0xFFからどうぞ。

LDRizeなど、他のScriptも後ほど対応します。

[後でどうやって対応したか書く予定]

Chrome4以降でoAutoPagerizeが動作しない件

Google ChromeのUserScriptsに関する仕様変更で、複数のUserScriptsで連携することが難しくなりました。このため、Chrome版のoAutoPagerize、LDRize、Minibufferは当面最新版のChromeをサポートしません。
代わりに、Extensions版のAutoPagerizeか、AutoPatchWorkをどうぞ。Minibuffer、LDRizeの代わりは、そのうち…
oAutoPagerize ver1.3.0 (Google Chrome 3用の更新) - 0xFFで対応しました。LDRizeはもう少々お待ちください


以下余談。
なんとか回避策はないかと検証してみましたが、contentWindowの廃止に伴って、完全にページ側のコンテキストと分離され、さらにUserScript同士も完全に別コンテキストとして実行されるようになってしまいました。script要素を作って、functionを文字列化してサイト側のscriptとして実行し直す方法で動作させることはできないこともないのですが、巨大なSITEINFOの文字列化が重たいため、現実的ではないようです。

script要素を作って実行し直すサンプル
(function(window,loaded){
	if (!loaded && this.chrome) {
		var fn = '(' + arguments.callee.toString() + ')(this,true);';
		var script = document.createElement('script');
		script.appendChild(document.createTextNode(fn));
		document.body.appendChild(script);
		return;
	}
	//本来の処理
})(window);

oAutoPagerize ver1.2.3

XREA.COMという記事を見つけ、調べてみたところFlickrのサイト側のJavaScriptの影響を受けて*1いることがわかりました。
ただ、直接的な対応をしなくても、XHTMLかどうかの判定方法を変えることで対応できることがわかったので、その方法で修正しました。
Safari以外には直接影響しませんが、一応アップデート推奨です。
oAutoPagerize - 0xFF

HTMLとNamespace

以下、内部的な話。
ちょっと前に b:id:vantguarde に教えてもらったのですが、HTML5ではhtml要素のデフォルトのNamespaceが http://www.w3.org/1999/xhtml になっているそうです。
その影響か、WebKitでは(つまりSafariGoogle Chromeでは)HTMLなページでも、lookupNamespaceURIするとNamespaceを取得できます。FirefoxOperaは、XHTML(単にXHTMLDTDを宣言しているだけでなく、ContentType: application/xhtml+xml or application/xmlなページ)の場合だけNamespaceを取得します。
これ自体はだからどういうことはないんですが、XPathでNamespaceが必要になるのはxhtml+xmlの場合なので、デフォルトNamespaceのありなしでPrefixのありなしを決めると必要以上にPrefixをつけてしまうみたいです。

というわけで、XHTMLかどうかの判定は、XML(XHTML)とHTMLの判定 - 0xFFのアイディアをベースに、すこし適当に、

var isXHTML = document.documentElement.tagName !== 'HTML';

としました(例によって、nanto_vi先生がこういう書き方をしていたような)。

Chrome2でのXPath

この記事を書いてて気がついたんですが、HTML と XHTML で同じ XPath を使う: Days on the MoonのサンプルがGoogle Chrome 2.0.177.1でエラーになっています。createExpressionがおかしいみたいで、Prefix付きのXPathを渡すとNAMESPACE_ERRになるみたい。これはChromeのバグっぽいかも。

*1:String#replaceがsplit,join方式に上書きされているという残念な実装。GreaseKitがページ側のScriptに影響を受けすぎるという面もありますが…