takeopera RSSフィード

2005 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 02 | 03 | 04 | 05 | 06 | 11 | 12 |
2008 | 01 | 09 | 10 |
2009 | 01 | 02 | 03 | 06 |

2008/10/16 Thu

[]onload時のfocusを無効にする 00:37 onload時のfocusを無効にする - takeopera を含むブックマーク はてなブックマーク - onload時のfocusを無効にする - takeopera onload時のfocusを無効にする - takeopera のブックマークコメント

// ==UserScript==
// @name          kill onload focus
// @namespace     http://orera.g.hatena.ne.jp/takef/
// @include       *
// ==/UserScript==

(function () {
	var inputFocusFunc = HTMLInputElement.prototype.focus;
	var textareaFocusFunc = HTMLInputElement.prototype.focus;

	opera.addEventListener('BeforeScript', function (e) {
		HTMLInputElement.prototype.focus = function(){};
		HTMLTextAreaElement.prototype.focus = function(){};
	}, false);

	document.addEventListener('load', function (e) {
		setTimeout(function() {
			HTMLInputElement.prototype.focus = inputFocusFunc;
			HTMLTextAreaElement.prototype.focus = textareaFocusFunc;
		}, 500);
	}, false);
})();

Twitterのスクリプトが変更されるたびにその場しのぎで対応するのが面倒になったので、どんなサイトでも対応できるようなのを作った。

やってることは難しくなくて、スクリプトの実行前にfocusをダミーの関数に置き換えて、onloadの0.5秒後に元に戻しているだけ。

追記(2008/10/19)

いただいたコメントを元に修正しました。

// ==UserScript==
// @name          kill onload focus
// @namespace     http://orera.g.hatena.ne.jp/takef/
// @include       *
// ==/UserScript==

(function () {
	var inputFocusFunc = HTMLInputElement.prototype.focus;
	var textareaFocusFunc = HTMLTextAreaElement.prototype.focus;

	HTMLInputElement.prototype.focus = function(){};
	HTMLTextAreaElement.prototype.focus = function(){};

	document.addEventListener('load', function (e) {
		setTimeout(function() {
			HTMLInputElement.prototype.focus = inputFocusFunc;
			HTMLTextAreaElement.prototype.focus = textareaFocusFunc;
		}, 500);
	}, false);
})();

edvakfedvakf2008/10/18 00:12var textareaFocusFunc = HTMLInputElement.prototype.focus;

var textareaFocusFunc = HTMLTextAreaElement.prototype.focus;
の間違いですね。
これでやると、はてなダイアリー (例えばこのページなど) で、onload 後に focus 関数が元に戻ってないと思うのですが、再現しますか? 他のページでは大丈夫っぽいんですけど。

os0xos0x2008/10/18 06:06BeforeScriptはJSONPとかの後から追加したscriptにも反応するので、はてなスターなどで「focus 関数が元に戻ってない」現象(正確には、戻した後にまた消してる現象)が起きるみたいです。

この場合、BeforeScriptを使う必要がないかなと思います。
delete で自分が定義したプロパティを消すことができるので、こんな感じにすることもできます。
HTMLInputElement.prototype.focus =
HTMLTextAreaElement.prototype.focus = Function();
window.addEventListener('load', function () {
setTimeout(function() {
delete HTMLInputElement.prototype.focus;
delete HTMLTextAreaElement.prototype.focus;
}, 500);
}, false);

edvakfedvakf2008/10/18 06:23os0xさんのおっしゃる方法で大丈夫そうなのですが、僕のコメントした件については下の方法で解決しましたので、お知らせしておきます。
http://d.hatena.ne.jp/Griever/20081017/1224261825

takeftakef2008/10/19 17:04>edvakfさん
わ、はずかしいミスですね。ご指摘感謝。

>os0xさん
おお、確かにBeforeScriptは使う必要がないですね。
そしてJSONPのことは想定外というか忘れてました。
ありがとうございます。

ちょっと気になったんですが、delete使ってしまうと元々あったfocusが消えてしまわないですか?




それにしてもコメント入力欄が小さすぎる・・・
あとでなんとかしよう。

トラックバック - http://orera.g.hatena.ne.jp/takef/20081016

2008/09/19 Fri

[]デザイン変わりましたね 19:13 デザイン変わりましたね - takeopera を含むブックマーク はてなブックマーク - デザイン変わりましたね - takeopera デザイン変わりましたね - takeopera のブックマークコメント

やっつけ対応。

// ==UserScript==
// @include        http://twitter.com/*
// ==/UserScript==

(function () {
    opera.addEventListener('BeforeScript', function (e) {
        if (!e.element.getAttribute('src')) {
            e.element.text = e.element.text.replace(/focusField/, 'void');
        }
    }, false);
})();
トラックバック - http://orera.g.hatena.ne.jp/takef/20080919

2007/12/29 Sat

[]フォームにフォーカスするのうざい 16:45 フォームにフォーカスするのうざい - takeopera を含むブックマーク はてなブックマーク - フォームにフォーカスするのうざい - takeopera フォームにフォーカスするのうざい - takeopera のブックマークコメント

Twitterの話ね。

Stop form focusが効かないので書いてみた。

// ==UserScript==
// @include        http://twitter.com/*
// ==/UserScript==

(function () {
    opera.addEventListener('BeforeScript', function (e) {
        e.element.text = e.element.text.replace(/\.focus\(\)/, '');
    }, false);
})();
トラックバック - http://orera.g.hatena.ne.jp/takef/20071229

2006/12/28 Thu

[]ショートカットキーに毒されてしまった人のためのUserJS 05:38 ショートカットキーに毒されてしまった人のためのUserJS - takeopera を含むブックマーク はてなブックマーク - ショートカットキーに毒されてしまった人のためのUserJS - takeopera ショートカットキーに毒されてしまった人のためのUserJS - takeopera のブックマークコメント

未完成だけど50%リリース

経緯

2005年11月
ショートカットキーうぜえ(→id:takef:20051115
2006年1月
使ってみると結構便利!(多分d:id:takef:20060128id:takef:20060129あたりの時期)
最近
ていうかむしろ他でもショートカットキーが使えるようにするべきだろ

というわけで作った。

簡単な説明

Google検索とかdel.icio.usとかcheck*padショートカットキーが使えるようになります。比較的簡単に他のサイトにも対応可能(と思う)。

詳しい説明は省略。スクリプトを読んだらある程度わかってもらえると期待。

http://www.asahi-net.or.jp/~hn9t-fjt/js/shortcutkey.user.js

TODO

おまけ(作業履歴)

今回は途中で作りかけの状態を残してみた。

http://www.asahi-net.or.jp/~hn9t-fjt/files/key0551.user.js

http://www.asahi-net.or.jp/~hn9t-fjt/files/key0635.user.js

http://www.asahi-net.or.jp/~hn9t-fjt/files/key0723.user.js

http://www.asahi-net.or.jp/~hn9t-fjt/files/key0809.user.js

http://www.asahi-net.or.jp/~hn9t-fjt/files/key0935.user.js

http://www.asahi-net.or.jp/~hn9t-fjt/files/key1004.user.js

http://www.asahi-net.or.jp/~hn9t-fjt/files/key1038.user.js

http://www.asahi-net.or.jp/~hn9t-fjt/files/key1207.user.js

http://www.asahi-net.or.jp/~hn9t-fjt/files/key1236.user.js

http://www.asahi-net.or.jp/~hn9t-fjt/files/key1522.user.js

トラックバック - http://orera.g.hatena.ne.jp/takef/20061228

2006/12/02 Sat

[]opera.defineMagicFunction 02:51 opera.defineMagicFunction - takeopera を含むブックマーク はてなブックマーク - opera.defineMagicFunction - takeopera opera.defineMagicFunction - takeopera のブックマークコメント

メモ

The mysterious Opera object

opera.defineMagicFunction(string: functionName,function: replacementFunction)

このreplacementFunctionの引数にちょっと注意。

調べてみたところ、第1引数が置き換える前の関数、第2引数windowオブジェクト(追記部分参照)、第3引数以降が関数に渡された引数となるようだ。

関数hogeに渡された引数と返り値を表示したい場合は下のようにしたらいいはず。多分。

opera.defineMagicFunction('hoge', function() {
  var f = arguments[0];
  var args = arguments.slice(2);
  opera.postError(args);
  var r = f(args);
  opera.postError(r);
  return r;
});

追記

ちゃんと調べずに一部間違ったこと書いてしまいました。先に公式な情報に当たるべきだった…。

ページが見つかりません | Opera

Browser Problems? We can help you! | Help & FAQ | Opera

上のページにちゃんと引数についても書いてあります。が、第2引数について説明してある部分

実関数にて 'this' のキーワードで言及されたオブジェクト

これがなんのことやらわからないので英語のほうも見てみました。

The object that would have been referred to by the 'this' keyword in the real function.

これを訳してみると、「実際の関数の中でthisキーワードによって参照されたであろうオブジェクト」かな?うーん分かりにくい。

多分意味するところは

function hoge() {
  var x = this;
}

このxと同じものが

opera.defineMagicFunction('hoge', function(func, obj) {
  // obj は上の x と同じ
});

第2引数として渡されるということだと思います。

トラックバック - http://orera.g.hatena.ne.jp/takef/20061202
2005 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 02 | 03 | 04 | 05 | 06 | 11 | 12 |
2008 | 01 | 09 | 10 |
2009 | 01 | 02 | 03 | 06 |