読者です 読者をやめる 読者になる 読者になる

素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

Safari5の拡張を試した

Chromeみたいに必要なときだけステータスバーを表示するSafari5拡張を書いた。
javascripter/smart-status-bar · GitHubに置いた。
同様の拡張はSafari Extensions by Daniel BergeyのInvisible Status Barがあるが、.safariextzをzipとして解凍して中身を確認すると分かるようにzipではなくxar?解凍できたのはアーカイバがうまくやってくれたからだ…。ステータスバーの下をクリックできなかったり、iframeに対応していなかったりなど、いくらか不足がある。よってそれらへの対応と、アニメーションを追加した。
やってることは単純。ステータスバーとしてドキュメントにspanを追加して、aタグにmouseoverした時にspanのテキストをURLにする。それからmouseover時のみオンになる属性を作って、CSSで表示をいじれるように。
左下に表示するには、iframe内の時にtopのwindowにどうにか伝達しなきゃいけない。ここではpostMessageを使った。ページ内のスクリプトと衝突する可能性があるが、今のところどうにもならない。postMessage系は複数用途で使うと衝突しやすいと思う。
ロケーションバーと違ってステータスバーは偽装できるのでスクリプトで表示してもセキュリティリスクは増加しないと思うが不安な場合は使わないこと。

その他、いくつか。

  • SafariのUserScriptはWebページとは分離されているので、(function () { })();は必要ない。
  • Object.defineProperty系など一部機能がうまく動かないことがあるっぽい。
  • about:blankとかもいじれる。topsitesとかは無理
  • アイコンは白黒しかできないっぽい?アイコンを動的に変えるのはどうやればいいんだろう?

まあだいたい、Safari5の拡張のAPIGoogle Chromeほとんど同じだなあ…。