SafariのAppleScriptに苦闘

カテゴリ: mac / programming

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

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

コメント

ぴよまるソフトウェア
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
Tats_y
なるほどー、ボタンオブジェクトの数を数えるわけなんですね! 参考になりました。ありがとうございます。 けっきょく私は、最初に取得したURLと同じものに出会うまでタブを切り替え続けるというスクリプトにしたんです。これだと同じURLのタブが複数あったときにうまく動作しませんから、スマートじゃないなあと思っていたところでした。 http://www.binword.com/blog/archives/000506.html それにしても、もうちょっとSafariのAppleScriptサポートを強化しても罰は当たらないような気がしますねえ。
ぴよまるソフトウェア
>はてなブックマークはだいぶ前に仕様変更されて、確認画面なしでは登録できなくなったようだ 確認画面(のURL)が表示されたことを検知して、Fromの送信ボタンをAppleScript経由で押させることは可能です(モノにもよりますが)。 タブ数のカウント   ↓ 各タブからURLを取得   ↓ はてなブックマークに登録   ↓ 確認画面の表示(URL変更、ページローディング完了を待つ)   ↓ 確認画面の送信ボタン(?)を実行 (以上、URLの数だけくりかえし) ……こんな具合に通しで自動実行できるはずですが、はてなブックマークを利用していないので(^ー^;;;
Tats_y
なんと! そんなことができるとは。情報をありがとうございます。 このあたりうまく活用すれば、Webアプリケーションがかなり使いやすくなりそうですね。Safari、侮れませんな……。
ぴよまるソフトウェア
Safariは、AppleScriptの「do JavaScript」コマンドでDOMアクセスやら何やらが行えるので、先の「ページローディングを待つ」とか「送信ボタンを実行」などもすべてdo JavaScriptコマンドでJavaScriptを実行して行うことになります。 「Safari」「AppleScript」「do JavaScript」をキーワードに検索すると、さまざまな用例が見つかることでしょう。