Firefox 3にするとまた見てるが動かなくなるのを直した。
従来は、GM_xmlhttpRequestを使って投稿して、そのとき認証が必要な場合は勝手にBasic認証のダイアログが出るようになっていました。それが、Firefox 3は出ないようです。
ってことで、GM_xmlhttpRequestでBasic認証はあきらめた。
実験したところ、JSONPならBasic認証のダイアログが出るのは確認できたので、これを使えば良さそう。
Twitterに投稿するAPIは(statuses/update)、リファラがあるとダメだしGETでもダメなので、JSONPでは呼び出せない。でも、それとは別にTwitterには認証だけするAPI(verify_credentials)があります。これはリファラがあってもOK、GETでもOK。
「また見てる」の投稿時、まずはJSONPでこの認証APIを呼び出すようにしました。ここで認証が必要な場合はBasic認証のダイアログが出ます。そうすると認証済のCookieが返ってくるので、そこでGM_xmlhttpRequestで投稿APIを呼び出す。これで、従来通りの動きをFirefox 3でも作れました。
ちなみに、JSONPが終わったあとにGM_xmlhttpRequestを呼ぶのがちょっと難しかった。
JSONPは終わった後コールバック関数を呼びますが、その関数はwindowオブジェクトの中に入ってないといけない(ってことでいいんですよね?)。しかしGMスクリプトなので、unsafeWindowということになります。この中に関数を作って、そこでGM_xmlhttpRequestを呼んだんですが、これはエラーになります。「unsafeWindowからGM_xmlhttpRequestを呼ぶな」という。確かに危険ですもんね。
仕方ないので、コールバック関数は空っぽの実装にして、何もしないことにした。代わりに、JSONPのために動的に生成したscript要素のloadイベントでGM_xmlhttpRequestをやるようにしたらうまく行った。まあその辺はソース見ればわかると思います。
文字数制限をちょっと緩めておいた。
動画の再生時間が取得できない場合に (aN:aN) となる件は、面倒なので対応してないです。ごめんなさい。再生時間が取れないとき「NaN」という値が返りますが、ゼロ詰めの際に下2桁を切り出してるので「aN」となっているだけです。ていうかどういう時に再生時間が取れないの?