スクリプト内に定義したスクリプトオブジェクトの親は、定義の書いてあるスクリプトとなります。
次のスクリプトを実行すると、parent
で指定していないのに、continue
の先が地のx
ハンドラになっていることが確認できると思います。
x() of ScriptObj
on x()
log "地のスクリプト"
end x
script ScriptObj
on x()
log "スクリプトオブジェクト"
continue x()
end x
end script
何も指定していない場合のスクリプトの親オブジェクトは、通常スクリプトを実行しているアプリケーションです。
次のスクリプトをエディタで実行すると、選択したファイルがエディタで開かれます。
open (choose file)
アプレットの場合、アプレットが親オブジェクトになります。
エディタでテストしている時とアプレットに保存した場合とで、parent
が異なるわけです。
エディタの上部に、この時の対象アプリケーションを変更できるポップアップメニューがあります。
これを切り替えると、対象アプリケーションのtell
ブロックでスクリプト全体を囲っているような状態になります。
また、一度保存したアプリケーション(アプレット)は、[スクリプト]-[アプリケーションを実行]で、アプリケーションとして実行できます。
parent
の指定を変えると、実行中のアプリケーションではなく、他のアプリケーションを継承元に指定することもできます。
property parent : application "Finder"
ただし、この場合はメッセージの継承元が指定したアプリケーションに変わっただけで、tell無しで用語が使えるようになるわけではありません。
アプリケーション独自の用語を利用したい時は、通常どおりtellで指定する必要があります(注1)。
open
は、AppleScript自身やOSAXで定義されている用語なので使用できるわけです。
parent
を変えた場合も、current application
という用語を使えば、現在のアプリケーションを指定することができます。
次のスクリプトでは、parent
をFinderに変えていますが、current applicationをtellで指定することで、openメッセージを現在のアプリケーション(例えばScript Editor)に送ることができます。
property parent : application "Finder"
tell current application to open (choose file)
スクリプト付加可能なアプリケーションでは、地のスクリプトのメッセージの送り先が、そのアプリケーション自身になっている場合がありますが、そのような場合も、parent
の指定で、メッセージの送り先を変えることができます。
例えば、次のスクリプトをFileMakerに書いた場合、マウスのクリックで終了するのは、FileMakerではなくFinderになります。
property parent : application "Finder"
quit