BathyScaphe

BathyScapheWiki

til501

BathyScaphe 1.2:スクリプトメニューから “open location” 命令を含むスクリプトを実行すると、動作が期待と異なる場合がある

BathyScaphe 1.2 以降で、BathyScaphe のスクリプトメニューから “open location” 命令を含む AppleScript を実行すると、“スクリプトエディタ” や他のアプリケーションから実行したときと動作が異なる場合があります。この記事ではその理由と、対処方法を説明します。

参考:この問題は BathyScaphe 1.0.2, 1.1.x では起こりません。

症状

たとえば、以下のようなスクリプトを “スクリプトエディタ” で実行した場合と、BathyScaphe のスクリプトメニューから実行した場合では、動作が異なります:

on run
    open location "http://www.apple.com/jp/"
end run
  • “スクリプトエディタ” でこのスクリプトを実行すると、ただちに Web ブラウザで http://www.apple.com/jp/ が開きます。
  • BathyScaphe のスクリプトメニューから実行すると、BathyScaphe が以下のようなアラートを表示します:

til501-1.png

また、次のスクリプトを実行した場合も、動作が異なります:

on run
    -- 2ch のスレッドの URL
    open location "http://pc7.2ch.net/test/read.cgi/mac/1111760449/"
end run
  • “スクリプトエディタ” で実行すると、Web ブラウザでこのスレッドが開かれます。
  • BathyScaphe のスクリプトメニューから実行すると、そのスレッドが BathyScaphe で開かれてしまいます(すでに開かれている場合は、そのスレッドのウインドウが最前面に移動します)。

対処方法

このような動作の違いは、スクリプト作成者の期待に反する場合があるでしょう。しかし、解決する方法はあります:

open location 命令を、明示的に適当な BathyScaphe 以外のアプリケーションへの tell ブロックの中に記述してください。例えば、次のように修正します:

on run
    -- どんなアプリでも良いが、適当なのが無ければ Finder にすると良い
    tell application "Finder"
        open location "http://www.apple.com/jp/"
    end tell
end run

このように記述すれば、スクリプトメニューから実行した場合でも、適切に動作します。

上級者向け情報

この問題の原因は、

  • BathyScaphe 1.2 以降では、GURL アップルイベントに対して独自の処理を行っていること
  • open location 命令は GURL アップルイベントの送信に他ならないこと
  • tell 文で囲まれていない命令は、実際には current application への tell 文で囲まれて実行されること

によるものです。詳細について興味がある場合は、お問い合わせください。


Article ID: 501
カテゴリ: Tech Info Library カテゴリ: AppleScript

Last Modified: