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:自己責任で旧バージョンを使うことを止めはしませんが、とてもオススメはできません

はてなハイク用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用の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でクロスブラウザを考えるなんて! と思う部分もありますが、仕方ないですね。
[/追記]