Hatena::Groupos0x

FFFF RSSフィード

0xFFのメモです。

2008 February 28th Thursday

Twitterの自動focusを強引に外すGreasemonkey Script

| 21:58 | Twitterの自動focusを強引に外すGreasemonkey Script - FFFF を含むブックマーク はてなブックマーク - Twitterの自動focusを強引に外すGreasemonkey Script - FFFF

snj14さんの発言見て、書いてみた。

http://ss-o.net/userjs/twitterstopfocus.user.js

// ==UserScript==
// @name           twitter stop focus
// @namespace      http://ss-o.net/
// @include        http://twitter.com/home*
// ==/UserScript==
(function(unsafeWindow){
	var onload = unsafeWindow.onload;
	unsafeWindow.onload = function(){
		var status = document.getElementById('status');
		var _id = status.id;
		status.setAttribute('id',_id + '_nofocus');
		var span = document.body.appendChild(document.createElement('span'));
		span = span.wrappedJSObject || span;
		span.id = _id;
		span.value = {'length':0};
		onload();
		document.body.removeChild(span);
		status.setAttribute('id',_id);
	}
})(this.unsafeWindow || window);

やってることは、テキストエリアのidを書き換え、ダミーを用意してエラーを回避、focusのScriptが動いたら、idを戻してあげる。

Firefox2、Safari3はこれでOKっぽい。Opera用は後で書く。

ちなみに、wrappedJSObjectにこういう風に値を渡すのはセキュアじゃないはず。

TwitterがjQuery使うようになって、動かなくなってたので素直にblur使うようにした。

Opera

http://ss-o.net/userjs/twitterstopfocus.js

// ==UserScript==
// @name           twitter stop focus opera
// @namespace      http://ss-o.net/
// @include        http://twitter.com/home*
// ==/UserScript==
opera.addEventListener("BeforeScript", function(e){
	if (!e.element.src)
		if (/\$\(["'][\w\-]+["']\)\.focus\(\);?/.test(e.element.text))
			e.element.text = "";
}, false);

srcが空のscript要素で、$(id).focus()に引っかかったら、そのscriptの中身を抹消。別に抹消することはないんだけど、そうしたほうがTwitter側で変更があったときにエラーになるのだけは回避できるかなと。まあ、別の不具合がでる可能性が高いんだけど。

Opera用にはロゴをクリックしたときに履歴に残さずリロードする処理が入っています。