less

QUnitのTextMateバンドル作った

探しても見つからなかったので作ってみました。

中身はこんな感じ。

equalsとsameはどっちのキーでも補完したかったので2つずつあります。

インスタンスの関数オブジェクトを自動的に取得したい

Pool.jsのバグを何とかしたい。

Pool.jsは実行元の関数オブジェクトのプロパティに__pool__として自身のインスタンスを保存、その際関数オブジェクトはarguments.callee.callerで取得しています。この方法は呼び出し元が関数やオブジェクトの時は問題なかったけど、クラスのインスタンスの場合挙動がおかしいことに気付いて困り中。クラスの場合、arguments.callee.callerがインスタンスの関数オブジェクト = そのコピー元のprototypeの関数オブジェクトなので

クラスのインスタンスを跨いでキャッシュが共有されてしまう。

ことになってしまいます。新鮮だけど使いにくい。確認コードはこんな感じ。

Foo = function() {};
Foo.prototype = {
    test: function() {
        new function() { arguments.callee.caller.prop = 'hello!'; };
    }
};

foo = new Foo;
foo.test();
alert(foo.test.prop); // "hello!"
alert(Foo.prototype.test.prop); // "hello!"
alert(foo.test === Foo.prototype.test); // true

とりあえず失敗するテストだけ書いておいた。明示的にコンテキストを指定しないといけないのかなぁ・・。

09102901 Halloween

09102901 Halloween

今日のExternal Interfaceハマり

IE

Flash側のメソッド(ExternalInterface.addCallback)にplaystopを宣言していたら動かない。ExternalInterface.addCallback IE エラー « Hyhy’s Weblogにある

ExternalInterface#addCallback で追加した関数名が、そのコールバックを呼び出した場所の this のプロパティ、プロパティチェインにその関数名を含む場合、エラーになる。

これに引っかかると思われる。JSでは宣言していないのでIEに何かあるんだろう・・。この仕様は危なすぎる。解決後に同じ事書いてるブログを発見。IE6で特定の名前のメソッドをExternalInterface.addCallbackできない - holidays-l開発ブログ

Firefox

FxはExternal Interfaceするflashを表示領域内に置かないと初期化処理が始まらずメソッドにアクセス出来ない。たぶん画面外のflashは読み込まないように最適化されてるっぽいのが原因。普通は問題にならないけど1 pxのflashとか使うとありがち。今日のように・・。

object要素にCSSを指定するとバグるので、その親の要素に指定して画面内に置く。

$('<div/>')
    .css({
        position: 'absolute',
        top     : $(window).scrollTop(),
        left    : 0
    })
    .appendTo('body')
    .fl({ ... });

$.flはSWFObjectのラッパーです。gistにあるよ

$Xを読み込むブックマークレット

XPathを調べる時に毎回$XをFirebugのコンソールにコピペしていたのでブックマークレットにした。読み込んでいる$Xはos0xさんのvery simple $X

Skip RedirectorをMEGAUPLOADに対応させた

MEGAUPLOAD側に修正が入ったため2010-02-26現在この方法は使えません。

hail2u.net - Weblog - MEGAUPLOADから簡単にダウンロードがそのまま取り込めそうだったので入れました。

このバージョン(0.5)からdocument内のリンク、ボタンをXPathで探す方法に加えて、URLを正規表現で置き換える方法が追加されます。SITEINFOの指定方法はMEGAUPLOADの指定を参考にして下さい。

  • urlキーで()を使ってグルーピング
  • replace_urlキーで後方参照を使ってURLを組み立てる

感じで指定します。コード的にはこんなです。

location.href = location.href.replace(new RegExp(url), replace_url);

Safari + GreaseKit用ReblogCommand作った

FirefoxにはReblogCommandという、キー一発でリブログしてくれるリブログ生活にはなくてはならないGMがあるのですが、GreaseKitの制限によりSafariでは動きません。くやしい>< でもリブログ出来る範囲をTumblr内に限定すれば動きそうだったので(クロスドメイン制限が問題なのです)、Dashboard限定でSafariで動くバージョンを作ってみました。

標準でTumblrのDashboardにその場でリブログするボタンを追加します。


リブログ前後で顔が変わる:D

oAutoPagerizeがインストールされていると足されたページにもボタンを追加します。また、Minibufferがインストールされていると、tキーでリブログしたりpキーでまとめてリブログしたり出来るようになります。

yksk.tumblr.comみたいなユーザーのTumblelog上では動きません。いいTumblrが見つかったらfollowしちゃえばいいですね!

TomblooにはTumblKitがありますので、合わせて入れるとよいです。これでリブログ用にFirefoxを立ち上げることもなくなるかな。

No Tumblr, No Life!

GMはレポジトリまとめることにした

Skip RedirectorがFirefoxで動いてなかった

FirefoxではcreateEventで作ったイベントからa要素をクリック出来ないみたいだ・・。a要素の時だけ以前のようにlocation.hrefで飛ぶようにしてみた。a要素にtarget属性が指定されてても無視されます。出来るなら統一したいなー。

1.1.2で統一しました。初期化処理をinitMouseEventにしたら上手くいったみたい。今まではinitEventを使っていました。

e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);

引数多い。

やっぱりだめみたい。上手く行ったと思っていたのは、そのa要素にonclickイベントが付いていただけだったっぽいです。むー。

あと、期限切れのキャッシュを上手く更新出来ていなかった問題も修正しました。

Skip Redirectorをとらのあなに対応させた

対応版をコミットwedataにルールを追加しました。

とらのあなの年齢認証はinput要素のクリックイベントから起動したJavaScriptでクッキーを発行して認証判定する仕組みになっています。今まではリダイレクトURLをa要素から取得していたため、この仕組みに対応出来ませんでした。今回createEventでクリックイベントを発行してページ移動を行うように変更したので、とらのあな以外にもクリックで移動、認証するほとんどのサイトに対応出来るようになったはずです:)

drryさんにSITEINFOの正規表現を添削して頂いていました。ありがとうございます。