パブリッシュする時に一緒にtrace文を省略した上で最適化保存してくれるJSFL


あったら便利かなと言うことで作ってみました。

var doc = fl.getDocumentDOM();
var profileXML = doc.exportPublishProfileString();
var newProfile = profileXML.replace("0", "1");
doc.importPublishProfileString(newProfile);
doc.publish();
doc.importPublishProfileString(profileXML);
doc.saveAndCompact();

こちらショートカットに登録すると便利に使えます。・・・使えるんですが、ショートカットを登録してもFlashを起動しただけだとショートカットが有効にならず、必ず1回キーボードショートカットのウィンドウを開かないとできない・・・。何故・・・。

下は開いているflaファイル全てに対して実行できるようにしたもの。

if (fl.documents.length > 0){
    for (i=fl.documents.length-1; i>=0; i--){
        cleanPublish(fl.documents[i]);
    }
}
else{
    fl.trace("ドキュメントが開かれていません。");
}
function cleanPublish(doc){
    fl.setActiveWindow(doc);
    var profileXML = doc.exportPublishProfileString();
    var newProfile = profileXML.replace("<OmitTraceActions>0</OmitTraceActions>", "<OmitTraceActions>1</OmitTraceActions>");
    doc.importPublishProfileString(newProfile);
    doc.publish();
    doc.importPublishProfileString(profileXML);
    doc.saveAndCompact();
}

最初はただ単にfl.documents[i]を関数に渡しただけでできるものかと思ったんですが、こちらと同じ罠に引っかかりました。

http://level0.kayac.com/2009/08/flatrace.php

対処法はいくつか試したんですが、

fl.setActiveWindow(doc);

でOKじゃないかと思います。これで現在開いているドキュメントをアクティブにできるので、fl.documents[i]が選択された状態になり、ドキュメントのプロパティも新しいものが選択されるはずです。

失敗したときは書き出し先が上書きされるという恐ろしい事態になったので、作るときは注意しないとですね。

ちなみに上のスクリプトのご利用は自己判断でご自由にどうぞ。

パッケージ名を自動で全部書き換えてくれるJSFLがあったら便利そう。ただ、JSFLでやる意味はあるのか、という疑問もありますね。ライブラリ内のものは除いて。

flFile.runCommandLine()

を使うとコマンドラインに命令を出せるようなので、こちらからテキスト編集プログラムを実行させた方が早いかもしれないですね。