現在アクティブなドキュメントに対してスクリプトを実行したあと、そのスクリプトを再度実行する際、アクティブなドキュメントが前回と同じかそうでないかを判定するにはどうしたらいいか? という話を同僚から相談されました。
実は以前こんな記事を書いているんですが。
ただこれはこれで汎用性に乏しい気がしたので、改めて書いてみることにします。というのが今回の記事です。
サンプルコード
//@targetengine "session" var curDocID = app.activeDocument.id; var exDocID = exDocID || undefined; if (curDocID !== exDocID) { alert("1回目の実行、もしくは前面ドキュメントが変わりました"); } else { alert("前回と同じドキュメントです"); } exDocID = curDocID;
コード解説
targetengine
を指定
前提として、実行されるスクリプトが変数の値を記憶して終了しないといけません。
したがってtargetengine
の指定が必須になります*1。
論理OR演算子を使う
前述の記事にも書きましたが、こういうケースでは僕は論理OR演算子||
を使うのが好きです。
論理OR演算子についてはこの記事のほうがわかりやすいかも。
ドキュメントの特定にはDocument.id
を使う
ドキュメントを一意に特定するには、Document.id
がお誂え向きでしょう。
var curDocID = app.activeDocument.id; var exDocID = exDocID || undefined;
変数curDocID
には現在の前面ドキュメントのIDを格納します。
一方、変数exDocID
には(既に実行されていれば)格納されていた自身の値、そうでなければundefinedが入ることになります。
スクリプトの最後にドキュメントのIDを保持する
exDocID = curDocID;
最後にexDocID
に前面ドキュメントのIDを格納しておくことで、スクリプトが再び実行された際、前面ドキュメントのIDと比較できるようになります。
応用次第ではいろいろ
今回はドキュメントを比較することにしましたが、同じ理屈でテキストフレームを比較したり、仕事をフォルダで管理しているならファイルパスを比較したりして、スクリプト実行時に前回実行時との状況の変化を捉えることができます。
意外と使いどころがあると思うので、いろいろ試してみてはいかがでしょうか。
*1:外部ファイルの読み込みなどを利用すればtargetengineすら不要ですが今回は割愛。