Make Link.safariextz
リンクテキストを生成するSafari Extensionを作りました。テストはほとんどしてません。正常に動かないことも多いと思うので、その場合はコメントしてください。(それか、もっとまともなExtensionがあると思うので…)
環境設定で3つまで生成パターンを登録できます。
タイトル・URL・選択テキストはそれぞれ、%title%・%url%・%selection%で表します。初期状態でパターンが一つ登録されているので、それを参考に記述してみてください。
登録したパターンがコンテクストメニューに表示されます。メニューを実行するとリンクテキストが表示されます。
Safari ExtensionでContext Menuを利用する場合には、一般には機能拡張ビルダーでコンテクストメニュー項目を作成しますが、今回は動的に作成してみます。
コンテクストメニューは、contextmenuイベントを取得してその時に作成します。具体的にはグローバルHTMLで
safari.application.addEventListener("contextmenu", handleContextMenu, false);
function handleContextMenu(event) {
event.contextMenu.appendContextMenuItem("doSomething", "Menu Name", "do-something");
}
とします。あとはcommandイベントでevent.commandがdo-somethingの時になにがしかの処理をします。
safari.application.addEventListener("command", handleCommand, false);
function handleCommand(event) {
if (event.command === "do-something") {
alert("do something);
}
}
Safari 5にSafari Extensionsが追加されました。
これでSafariの追加機能が簡単に作成できるようになりました。
ただ、デフォルトでは有効になっていないので、開発メニューを表示して、「機能拡張を有効にする」をONにする必要があります。
機能拡張はSafari Extensionsの訳。
Extensionを開発するにはSafariの開発メニューの「機能拡張ビルダーを表示」でビルダーを表示して作成します。

+ボタンをクリックすると新規機能拡張と機能拡張を追加が表示されます。
新規の方をクリック。Saveパネルが表示されるので名前を付けます。
名前はHelloWorld。
HelloWorld.safariextensionというフォルダが作成される。中にはInfo.plistがあります。

デベロッパ証明書が必要なので
http://developer.apple.com/safari/certificates/index.action
から取得。取得するにはSafari Developer ProgramにJoinが必要(無料)。


キーチェーンアクセスアプリを起動。
キーチェーンアクセスメニューの証明書アシスタントの「認証局に証明書を要求…」を実行。
ユーザのメールアドレスと通称に自分の情報を記述。要求の処理をディスクに保存に設定。
証明書を保存。
Safariに戻ってContinue。

証明書を選択してGenerate。


ダウンロードしてキーチェーンに追加。
無事Safari Developerになりました。

ではではHelloWorldを表示するために…
HelloWorld.safariextensionフォルダにhelloworld.htmlファイルを作成。内容は以下。
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
</head>
<body>Hello World!</body>
</html>
Extensionsバーにボタンを表示作成するために、Extensions Builderの新規バーをクリック。

こんなかんじで入力。
Extensions Buildreのインストールボタンをクリック。すると…

Extensionバーが表示されてHello World!があります。
このHello World!という表示はhelloworld.htmlのBodyが表示されています。ので、BodyをHello Safari Extension Bar!に変更してExtensions Builderの再度読み込むをクリックすると

になりました。
どんなExtensionが現れるかたのしみです。
自分は何つくろうかな。