バグっぽいものに出くわしたのでメモ。
UndoModes.FAST_ENTIRE_SCRIPTでスクリプトを実行しているとき、値がfalseであるようなisValidプロパティにアクセスすると、それまでの変更が元に戻ってしまうらしい。(CS6@Windows7で確認)
app.doScript(main,ScriptLanguage.JAVASCRIPT,[],UndoModes.FAST_ENTIRE_SCRIPT);
function main(){
var Sel0=app.activeDocument.selection[0];
Sel0.contents="かきかえたよ";
alert(Sel0.contents);
$.writeln(app.documents.item("ないよ").isValid);
alert(Sel0.contents);
}
上記のスクリプトを、適当に文字を入れたテキストフレームを選択して実行すると…
テキストフレームのコンテンツを"かきかえたよ"に書き換え、アラートにそのコンテンツを表示する。もちろん "かきかえたよ" と表示される。
ここで、"ないよ"という名前のドキュメントを取得し、そのisValidプロパティにアクセスしてみる。そんな名前のドキュメントは無いのでfalseが返ってくる。
再度、テキストフレームのコンテンツをアラートすると、なぜか書き換える前のものが表示される。
回避方法:UndoModes.ENTIRE_SCRIPT にしておく。
速いからってなんでもFAST_ENTIRE_SCRIPTにしときゃいいってもんじゃないようですな。
(2019/11/07 追記)
ちなみにobj.isValidを同等な別の表現
obj!=null
とか
(function(){try{obj.name;return true;}catch(e){return false}})()
にしてもダメです
PR