忍者ブログ

ぼんぷろぐ

InDesignとかイラレとかのスクリプトよもやま話

新しいブログに引っ越しました。

こちらのブログはもう更新しませんが、コメント欄は生きてますので疑問、ご指摘などありましたらどうぞ。

[InDesign]
UndoModes.FAST_ENTIRE_SCRIPTとisValidのバグ(InDesignスクリプト)

バグっぽいものに出くわしたのでメモ。
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

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

無題

やはり、バグでしたか…
同様の問題に当たって
解決方法に悩んでいたので大変助かりました!

プロフィール

kawamoto_α
(あるふぁ(仮))


InDesignで新聞組版のようなことをしています。

ツイッタ

※ブラウザによっては当ブログからDLしたzipファイルが拡張子なしになることがあるようですが、.zipを補って開いてください。



イラレ用トーンカーブスクリプト(¥1500)



クロソイド式角丸長方形スクリプト(¥500)
Illustrator用
InDesign用



イラレスクリプトをキーボードショートカットで実行するやつ(Win用)