08/21|||TOP↑
以下は Mac OS X 10.4.6 上で調べたものです。
環境が違うと結果が異なる可能性があります。
こういう書き方のやつです。
property num : 0
display dialog num
set num to num + 1
変数と同じように使えるけれど変数と違ってスクリプト終了後も値 (上記の場合だと num に代入された数値) が保存される、ということになっているのですがどうもうまくいかないことがあるのでいくつか試してみました。
で、だいたい雰囲気はつかめました。「だいたい」なのでとりあえず箇条書き。
- 実行の方法による違い
- スクリプトメニューから実行すると num に代入された数値 (以下値) がスクリプトファイル (以下ファイル) のどこかに書き込まれる。このことは実行のたびにファイルの変更日が更新されることで確認できる。
この場合ログアウト/ログイン や OS の再起動をしても値は保持される。 スクリプトエディタ上から実行すると値がファイル以外のどこかに保存される (メモリ?)。
ファイルを開いているかぎりスクリプトを実行するたびに値は「1,2,3....」と増えていくが、ファイルを閉じると初期値 (0) に戻ってしまう。スクリプトエディタ上で実行して変更された値は、スクリプトメニューから実行するときには継承されない。逆も同じ。つまりスクリプトエディタ上で実行して保存された値と、スクリプトメニューから実行して保存された値は互いに別物で干渉し合わない (試した限りでは)。
(勘違いでした。コメント欄の MeSH さんのコメントを参照してください)
- スクリプトメニューから実行すると num に代入された数値 (以下値) がスクリプトファイル (以下ファイル) のどこかに書き込まれる。このことは実行のたびにファイルの変更日が更新されることで確認できる。
- スクリプトメニューから実行してファイルに書き込まれた値が初期値に戻るタイミング
- スクリプトエディタでファイルを開き変更を加え保存すると値は初期値に戻る。
変更を保存せずにファイルを閉じれば値は保持される。 - 内容に実質的な変更がなくてもとにかく「ファイルを保存し直す」という操作があれば初期値に戻る。たとえば改行を加えてからその改行を削除するなども有効。変更してから「取り消し (command+z)」を行って「保存」メニューがグレーになっている場合はファイルを閉じても値は保持される。
- ファイル名を変更しても値は保持される。
- ファイルの階層が変わっても値は保持される。
- スクリプトエディタでファイルを開き変更を加え保存すると値は初期値に戻る。
- ファイルを別ユーザに渡すとき
- 同一 Mac 内の別ユーザにドロップボックス経由でファイルを渡した場合、値は保持されているがアクセス権が「読み出しのみ」でありスクリプトメニューから実行しても値は更新されない (ファイルに値を書き込む権限がないため)。同ファイルをスクリプトエディタ上で実行する場合は値を書き込む必要がないため、ファイルを開いている間にかぎり実行するたびに値が更新される。
Finder の「情報を見る」でアクセス権を変更すればスクリプトメニューから通常通り実行できる。また、アクセス権を変更しても値が初期値に戻ることはない。 - OS 標準の機能で zip 圧縮したものをアップローダに揚げて別ユーザでダウンロードするとアクセス権はそのファイルを受け取ったユーザのものになる。値は保持される。zip でなく dmg でも同様。
- 同一 Mac 内の別ユーザにドロップボックス経由でファイルを渡した場合、値は保持されているがアクセス権が「読み出しのみ」でありスクリプトメニューから実行しても値は更新されない (ファイルに値を書き込む権限がないため)。同ファイルをスクリプトエディタ上で実行する場合は値を書き込む必要がないため、ファイルを開いている間にかぎり実行するたびに値が更新される。
Safari の Yahoo! Japan ログイン画面で自動入力する AppleScript
このスクリプトを、Gmail に置き換えてみましたが、だめでした。何か方法はありますか?
ちなみに、知識ゼロの初心者です。
ちなみに、知識ゼロの初心者です。
>swa4747さん
こんな感じで
tell application "Safari"
activate
try
if URL of document 1 starts with "https://www.google.com/accounts/ServiceLogin" and name of document 1 contains "Gmail" then
do JavaScript "document.forms[0].Email.value='USER_ID'" in document 1
do JavaScript "document.forms[0].Passwd.value='PASSWORD'" in document 1
do JavaScript "document.forms[0].submit()" in document 1
else
do JavaScript "location.href='http://www.amazon.co.jp/'" in document 1
end if
end try
end tell
URLがhttps://www.google.com/accounts/ServiceLoginで始まり、かつ、タイトルに「Gmail」を含むページのときだけ正しく実行され、それ以外のページで実行するとAmazonに飛ばされます。
残念ながらGmailのアカウントを持っていないのでちゃんとログインできるか確認できませんでしたが、多分大丈夫かなと。
書き忘れたので追記:
スクリプト中に出てくる「USER_ID」は自分のIDに、「PASSWORD」は自分のパスワードに書き換えてください。
こんな感じで
tell application "Safari"
activate
try
if URL of document 1 starts with "https://www.google.com/accounts/ServiceLogin" and name of document 1 contains "Gmail" then
do JavaScript "document.forms[0].Email.value='USER_ID'" in document 1
do JavaScript "document.forms[0].Passwd.value='PASSWORD'" in document 1
do JavaScript "document.forms[0].submit()" in document 1
else
do JavaScript "location.href='http://www.amazon.co.jp/'" in document 1
end if
end try
end tell
URLがhttps://www.google.com/accounts/ServiceLoginで始まり、かつ、タイトルに「Gmail」を含むページのときだけ正しく実行され、それ以外のページで実行するとAmazonに飛ばされます。
残念ながらGmailのアカウントを持っていないのでちゃんとログインできるか確認できませんでしたが、多分大丈夫かなと。
書き忘れたので追記:
スクリプト中に出てくる「USER_ID」は自分のIDに、「PASSWORD」は自分のパスワードに書き換えてください。
属性の保存先
スクリプトの属性は、文字通りそのスクリプトのデータそのものに書き込まれています。
スクリプトを実行するときは、アップレットやスクリプトエディタがそれを読み込み、それぞれの中で実行することで、それに付随する属性値も変化します。
アップレットは、終了時に自分のファイルにその変更を書き戻します。
スクリプトエディタの場合、「保存」してから閉じると属性の変更も保存されますが、「保存しない」で閉じることもできます。
頭の中で、スクリプトをひとつの物体(object)のように考えてみると良いです。
これはディスクとアプリケーションメモリの間で複製や上書きが可能だと思ってください。
必要に応じて、これらは一方からもう一方に上書きされ、その際に属性も一緒に付いて回るのです。
属性の保存先は、そのスクリプトのファイル本体であることに注意してください。
スクリプトを実行するときは、アップレットやスクリプトエディタがそれを読み込み、それぞれの中で実行することで、それに付随する属性値も変化します。
アップレットは、終了時に自分のファイルにその変更を書き戻します。
スクリプトエディタの場合、「保存」してから閉じると属性の変更も保存されますが、「保存しない」で閉じることもできます。
頭の中で、スクリプトをひとつの物体(object)のように考えてみると良いです。
これはディスクとアプリケーションメモリの間で複製や上書きが可能だと思ってください。
必要に応じて、これらは一方からもう一方に上書きされ、その際に属性も一緒に付いて回るのです。
属性の保存先は、そのスクリプトのファイル本体であることに注意してください。
スクリプトエディタ上での実行について
>MeSH さん
確認できました。
スクリプトエディタ上で実行した後に保存を行い、スクリプトメニューから同じファイルを実行したところ、見事に値の変更が引き継がれていました。
こういうことだったんですね。ありがとうございます。
確認できました。
スクリプトエディタ上で実行した後に保存を行い、スクリプトメニューから同じファイルを実行したところ、見事に値の変更が引き継がれていました。
こういうことだったんですね。ありがとうございます。
|TOP↑|