2006年09月13日

[Macintosh] , [プログラミング]

SafariのAppleScriptに苦闘

この前のエントリで書いた、「Mac OS XのSafariで開いているタブをすべてはてなブックマークに登録するスクリプト」を作ってみようと思い立つ。ちょっとした息抜きになるかと思ったら、これがかなりややこしい。AppleScript超初心者の私がいうのも何だけど、AppleScriptから呼び出せるSafariの機能ってあまりにも貧弱すぎじゃないか。特にタブ関連。
そもそも、開いているタブの数を取得したり、タブを切り替えることすらできないのだ。複数のタブのURLを取得する方法として、ちょっと思いついたのは、
・現在のページのURLを取得
・そのURLを配列(AppleScriptだとリスト)に保存
・AppleScriptのUI Scripting(メニューやボタン操作をAppleScriptから行う)を使って、次のタブを選択
・これだと無限にタブを切り替え続けてしまうから、現在のページのURLを配列内のデータと比較して、一致したら終了(このアルゴリズムだと同じURLのページを開いていた場合問題になるけど、とにかく手軽さ最優先)

これでうまく行くかと思いきや、処理の途中で無限ループに入ってしまう。うーむ、AppleScript(というかプログラム全般ですが)はよくわからん……。

Posted by Tats_y at 2006年09月13日 17:35 | このエントリーを含むはてなブックマーク ブックマークに追加する | この記事へのリンク
この記事へのトラックバック
(※このエントリーに対してトラックバックを送る際は、下記URLをコピーし、自分のエントリーの「TrackBack先のURL」欄に貼り付けてください)



(※この記事へのリンクは、http://www.binword.com/blog/archives/000505.htmlにお願いします。トラックバック用URLとは異なりますのでご注意ください)

以下は、このエントリーに送られたトラックバックです。
この記事に対するコメント

Safariの最前面のウィンドウのタブの数を数えるなら、このように操作します。「UI Element Scripting」をキーワードにして捜すと、情報が見つかることでしょう。

 tell application "System Events"
  tell process "Safari"
   tell group 3 of window 1
    set a to count every button
   end tell
  end tell
 end tell

Posted by: ぴよまるソフトウェア at 2006年10月23日 20:57

なるほどー、ボタンオブジェクトの数を数えるわけなんですね! 参考になりました。ありがとうございます。
けっきょく私は、最初に取得したURLと同じものに出会うまでタブを切り替え続けるというスクリプトにしたんです。これだと同じURLのタブが複数あったときにうまく動作しませんから、スマートじゃないなあと思っていたところでした。
http://www.binword.com/blog/archives/000506.html
それにしても、もうちょっとSafariのAppleScriptサポートを強化しても罰は当たらないような気がしますねえ。

Posted by: Tats_y at 2006年10月23日 22:26

>はてなブックマークはだいぶ前に仕様変更されて、確認画面なしでは登録できなくなったようだ

確認画面(のURL)が表示されたことを検知して、Fromの送信ボタンをAppleScript経由で押させることは可能です(モノにもよりますが)。

タブ数のカウント
  ↓
各タブからURLを取得
  ↓
はてなブックマークに登録
  ↓
確認画面の表示(URL変更、ページローディング完了を待つ)
  ↓
確認画面の送信ボタン(?)を実行
(以上、URLの数だけくりかえし)

……こんな具合に通しで自動実行できるはずですが、はてなブックマークを利用していないので(^ー^;;;

Posted by: ぴよまるソフトウェア at 2006年10月24日 09:51

なんと! そんなことができるとは。情報をありがとうございます。
このあたりうまく活用すれば、Webアプリケーションがかなり使いやすくなりそうですね。Safari、侮れませんな……。

Posted by: Tats_y at 2006年10月24日 11:29

Safariは、AppleScriptの「do JavaScript」コマンドでDOMアクセスやら何やらが行えるので、先の「ページローディングを待つ」とか「送信ボタンを実行」などもすべてdo JavaScriptコマンドでJavaScriptを実行して行うことになります。

「Safari」「AppleScript」「do JavaScript」をキーワードに検索すると、さまざまな用例が見つかることでしょう。

Posted by: ぴよまるソフトウェア at 2006年10月24日 19:11
コメントを投稿する









次回投稿するために、あなたのお名前やメールアドレスを記憶しておきますか?




コメントスパム防止のため、画像で表示されている文字を入力してください。