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

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

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

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

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

WebKitのデバッガが超絶便利になっている件

WebKitデバッガはDroseraという別アプリで提供されていましたが、つい最近(2008/05/16)本体とセットになるようになりました。

このデバッガがヤバイです。(画像でかくて自分のモニタでもはみ出してるけど気にしない)

  • 開発のWebインスペクタを開いてから、Scriptsを選択するとDebuggerを起動するか聞かれる

f:id:os0x:20080520194537p:image

  • Attach Debuggerをクリックすると左上に読み込んでるScriptがリストになっている。(eval script)となっているのはGreaseKitが実行するScriptの模様。

f:id:os0x:20080520194538p:image

  • GreaseKitのScriptもちゃんとソースが見えるし、

f:id:os0x:20080520194539p:image

  • 左下の蟻アイコンが青くなっているとエラー(?)のあった箇所でPauseする。右上にPausedと出ていて、この左のボタンでステップ実行とかが出来る。

f:id:os0x:20080520194541p:image

  • 右側にはローカル変数とクロージャで保持されている変数がスコープごとに区切られて見える。

f:id:os0x:20080520194540p:image

Greasemonkey Scriptのステップ実行や、スコープごとに区切って変数を表示してくれるのは私の知る限りWeb Inspector's debuggerだけ。WebKitGreasemonkey Scriptがものすごく開発しやすくなるので、またやりたいことが増えました。とりあえず、SafariLDRize、Minibufferが重いのはこれで解決できそうな気配です。

  • わからないこと
    • ブレークポイントの設定の仕方(現状できない?)
    • Pauseする条件もイマイチ
    • ところで、こいつの名前はWeb Inspector's debuggerでいいのかな?

なお、WebKit nightlyは開発版なので、おそらく(間違いなく?)不安定です。お試しは自己責任でお願いします。

追記

今日nightlyの33980入れてみたら、今度はProfilesタブが追加されて、consoleにprofileとprofileEndが追加されていました。
画像はoAutoPagerize、LDRize、Minibufferにconsole.profile入れてみたところ
f:id:os0x:20080522130722p:image

LDRize and Minibuffer for Opera, Google Chrome and GreaseKit(Safari)

LDRizeOperaWebKitへの移植版です。SITEINFOファイルは定期的に更新されているので、適当にアップデートしてください(Windowsの場合、バッチでどうぞ)。

for Google Chrome2, GreaseKit(Safari3+)

http://ss-o.net/userjs/ldrize.safari.user.js
http://ss-o.net/userjs/minibuffer.safari.user.js
Opera用とWebKit用でファイル名が違いますが、中身は基本的に同じです。
Safariでの動作が不安定のようで、一部サイトが表示されない、異常に重くなるなどの不具合が発生するかもしれません。お手数ですが、除外サイトとして指定する、Bookmarkletとして使うなどで対応してください。
soh335
soh335

  • 2009/05/10 11:50
    LDRizeのSITEINFOがwedataに移転した件に対応しつつ、本家のバージョンアップに追従しました。ファイル名が変わっているので、旧バージョンはアンインストール(削除)してください。
  • 2008/02/29 13:37
    Minibufferのコンソールが開かない不具合を修正しました
  • 2008/02/12
    パラグラフが大量にあるページ*1を開いたときにブラウザが固まってしまうのを防ぐために、SITEINFOのマッチングを簡略化して、高速化を図ってみました。今のところ問題なさそうなんですが、もしかすると副作用があるかもしれません。。
  • 2008/02/12
    LDRizeの実行タイミングをonloadに変更(画像のロードなどを待つことになりますが、他のScriptへの影響を小さくできるので、試験採用)。
  • 2008/02/11
    Safari版で、GoogleなどXPathにid関数を使っているページで動かなかった問題に対応しました。修正は主にMinibufferのほうですが、両方更新してください。修正に当たって、jAutoPagerize( http://coderepos.org/share/log/lang/javascript/userscripts/jautopagerize.user.js? )を参考にさせていただきました。多謝。
  • 2008/02/04
    Opera版とSafari版を区別して、Safari版の名前を変えました。
  • Safari & GreaseKit1.4でも一応動くようになりました。コマンドの補完が効かないけど。。コマンド補完できるようになりました

oAutoPagerizeと同じく、LDRizeの中にSITEINFOを埋め込んでいます。実行される順番は意識しないでも問題ないようにしてあります。2つ以上Pinして開くとポップアップブロックに引っかかるので注意です。回避できました
とりあえず入れてみて、Googleで検索して適当にj,kを押してp押してoとか押してみればよいと思います。矢印キーやTABキーなどのデフォルト動作をキャンセルできていないのは仕様です。。なんとかしたいところですが。Operaではinput@type=textではなく、textareaを使うようにして対応しました。
まあ、なんとか動作するようにしたというのが現状で、近日中に細かいところに手を入れる予定です。*2

*1:うっかり痛いニュースを開いたときなど、Operaが死にそうになる。。

*2:CSSのMoz系とか

Safari3*GreaseKit1.4用のGM関数

?D of Kをベースに。

if (typeof(GM_addStyle) != 'function') {
	function GM_addStyle(css) {
		var head = document.getElementsByTagName('head');
		if (!!head) {
			var style = document.createElement('style');
			style.type = 'text/css';
			style.textContent = css;
			head[0].appendChild(style);
		}
	}
}
if (typeof(GM_setValue) != 'function' && typeof(GM_getValue) != 'function') {
	function GM_setValue(name, value) {
		document.cookie = [
			name, '=', escape(value),
			';expires=', (new Date(new Date().getTime() + 365 * 1000 * 60 * 60 * 24)).toGMTString()
		].join('');
	}
	function GM_getValue(name, value) {
		var r = new RegExp(name + '=([^;]*)'), m;
		if (m = document.cookie.match(r)) {
			return unescape(m[1]);
		}
		return value;
	}
	function GM_delValue(name, value) {
		if (GM_getValue(name, false))
			document.cookie = name + '=;expires=Thu, 01-Jan-1970 00:00:01 GMT';
	}
} else {
	var GM_delValue = GM_setValue;
}

GM_addStyleはstyle.innerHTMLをtextContentに変えただけ。
GM_setValueはnew Date() + 365 * 1000 * 60 * 60 * 24をnew Date().getTime() + 365...に修正。
GM_getValueの正規表現に余計な/が入っていたのでそれを削除。

以上です。
[追記]
あ、もちろんOpera9.25でも使えます。
Userjsでクロスブラウザを考えるなんて! と思う部分もありますが、仕方ないですね。
[/追記]

はてなハイク用GreasemonkeyをSafari3対応に

はてなハイク用GreasemonkeyをOpera対応に - 0xFF関連。

g:subtech:id:cho45 さん作の
Haiku の Reply を全部展開する Greasemonkey - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。 - subtechがやはりGM関数の都合でGreaseKit1.4では動かないので、対応した。

http://ss-o.net/userjs/hatena.haiku.autopagerizeforhaiku.user.js

あ、もちろん両方ともFirefoxでも動きます。たぶん。

Safari3 * GreaseKit1.4 でoAutoPagerize

GreaseKit 1.4でセキュリティの問題からGM関数が削除されました。GreaseKit および Creammonkey の GM 関数に関する脆弱性
そのため、jAutoPagerizeなど多くのScriptが動作しなくなっています。*1

そこで、同じくGM関数がない前提で作成しているoAutoPagerizeを動かしてみました。

インストールはoAutoPagerize - 0xFFからどうぞ。

  • Opera用は.jsでしたが、こちらは.user.jsに
  • 例によって数時間おきにSITEINFOが更新されています
  • Safariだとheadタグ内のlinkが消えてしまうようで、はてなダイアリーなどで3ページ目を取得できません
    • はてなダイアリーのSITEINFOを本体に持つようにしたので、ダイアリーでも動作するようになりました

jAutoPagerizeを参考にして、とりあえず動くようにしたレベルなので、バグがあったりしてすぐに修正が入るかもしれません。ご了承を。


なお、今まで書いたいくつかのUserjsもSafari3対応を進めているので、順次公開していく予定です。

セットで OperaとSafariでLDRizeとMinibuffer もどうぞー
はてなハイクについてははてなハイク用GreasemonkeyをSafari3対応に - 0xFFもどうぞ

*1:自己責任で旧バージョンを使うことを止めはしませんが、とてもオススメはできません