フレームグリッド/テキストフレームか否かのJavaScriptでの判定について

[5995]フレームグリッド/テキストフレームか否かのJavaScriptでの判定について | 投稿者:五月 貴 | 投稿日:2011/08/07(Sun) 19:02:41
MacOS10.6.7 CS5(7.0.4)上でのJavaScriptについてご相談したいことがございます。

スクリプトを公開していらっしゃる多くの方が,先頭に(例)
var obj = app.selection;
// text object?
if (obj.hasOwnProperty('baseline') == false) {
   exit();
}
と,選択したオブジェクトがテキストフレームかどうかをプロパティの有無を参照することで判定する記述をなさっていますが,当方ではどうもこの段階でexitしてしまい,先に進みません。
また,これでテキストフレームかフレームグリッドかの違いも判定できればと思っています。

できましたらお力をお借りできますと幸いに存じます。
どうぞよろしくお願い申し上げます。
» 1
自分もその書き方はしますが、
var obj = app.selection[0]; // TextFrame
$.writeln(obj.hasOwnProperty('baseline'));
はfalseなので
TextFrameを除外して、Story, Text, TextStyleRange, Character, InsertionPointとかをまとめて判定したいときに使います。

TextFrameかどうかは
$.writeln(obj.constructor.name === "TextFrame");
でわかります。
TextFrameであると判定した後に
$.writeln(obj.parentStory.storyPreferences.frameType === FrameTypes.FRAME_GRID_TYPE);
$.writeln(obj.parentStory.storyPreferences.frameType === FrameTypes.TEXT_FRAME_TYPE);
でそれぞれフレームグリッドとテキストフレームの判定ができます。
» 2
mg様

ご説明ありがとうございます。
PICTRIX様ご作成のプロパティをチェックするスクリプトをCS3とCS5で動かしてみたところ,CS3にはある"baseline"というプロパティがCS5にはないようですね。
ご教示頂いた方法を試してみたいと思います。
場所によって,テキストフレーム/フレームグリッドを使い分ける場合も多々あると思うので両方に対応できた方がよいですね。
» 3
お世話になります。
>CS3にはある"baseline"というプロパティがCS5にはないようですね。
PropList では、for( i in object ){ でプロパティを拾っていますが、
AI の場合で恐縮ですが、有るはずのプロパティが、これでリストアップされない物があります。
例えばオブジェクトが TextFtame の場合、characters や lines や・・・
ID でもそうなのかも知れませんので、PropList で表示されるプロパティが全てではないとお考えください。
この程度の知識で作った物です、申し訳ないです。^^;
» 4
InDesignのプロパティ取得は
var obj=app.activeDocument.selection[0];
$.writeln(obj.properties.toSource().replace(/,/g,","));
とか
var obj=app.activeDocument.selection[0];
for (var i in obj.properties) {$.writeln(i+": "+obj.properties[i]);};
でやります。
それで見る限りCS3でも5でも TextFrame に baseline は出てこないはずなんですが...
» 5
PICTRIX様

コメントありがとうございます。
お話から察すると,もしかしたらCS5では全プロパティを得るためには別の方法を使わなければいけないのかもしれませんね(ただ私はスキル不足で方法を調べる術すら思いつきませんが)。

JavaScriptに手を出したおかげで受注可能なページ数が飛躍的に増えました。
プログラミングに時間がかかるため看板に掲げる訳にはいかないのですが,お客様からすると小回りの利く個人に発注できてまたメリットがあるかと。
» 6
mg様

入れ違いでプロパティ取得法のご案内をいただきましてありがとうございます。
後で試してみたいと思います。
» 7
mgさん曰く>
>それで見る限りCS3でも5でも TextFrame に baseline は出てこないはずなんですが...

私の所でも出てきません。CS3

gridDataを調べるのはいかがでしょ。>五月さん
» 8
PICTRIX様

残念ながら,gridDataというプロパティを調べたところFalseでした...。
mg様ご提案の方法で以下のスクリプトを書きました。

var obj=app.activeDocument.selection[0];
$.writeln(obj.parentStory.storyPreferences.frameType === FrameTypes.FRAME_GRID_TYPE);
$.writeln(obj.parentStory.storyPreferences.frameType === FrameTypes.TEXT_FRAME_TYPE);

フレームグリッドを選んだところ,当たり前ではありますが2行目はTrue,3行目はFalse。
テキストフレームでは逆の結果になりました。

とりあえず前進できそうです。
皆様ありがとうございました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)