リンクをクリップボードにコピー
コピー完了
UXPScriptingでalertが使いたかったので、以下の様にしたのですが
app.doScript(function(){alert("猫大好き");}, ScriptLanguage.JAVASCRIPT);
エラーが出ます。
何が間違っているのでしょうか、それとも不具合でしょうか?
app.doScript("alert('猫大好き');", ScriptLanguage.JAVASCRIPT);
だと大丈夫ですが、使いずらいです・・・
リンクをクリップボードにコピー
コピー完了
UXPScriptに移行しても制御構造はほとんど同じなので普通の構成ならdoScriptを使う必要はないかと思います。しかし、UXPScriptでは様々な部分でシンタックスシュガーが廃止されていますので従来のExtendScriptとは扱いが異なる部分は多いです。このへんは慣れないと致し方ないことでしょう。
リンクをクリップボードにコピー
コピー完了
シンタックスシュガー、初めて聞く言葉です・・・
app.doScript(function(){
alert("猫大好き");
}.toString().split("\r").slice(1,-1).join("\r"), ScriptLanguage.JAVASCRIPT);
この形にすると動きましたが、これが最良かどうか・・・
リンクをクリップボードにコピー
コピー完了
UXPScriptはまだ実装途中で完成していないと考えてください。ですからまだ仕様とも不具合とも言えない部分が多く存在する気がします。
UXPScriptのdoScript()メソッドの最初の引数ですが、値としては
・文字列
・ファイル
・関数
を指定できるはずなのですが、現時点では「文字列」しか受け付けていない感じですね。
ですから別の返信で「.toString()」を付けているように、文字列にすると動作することになるわけですね。
UXPScriptではalert()が使えないので、doScript()を使用してExtendScriptを呼び出している(2つ目の引数のScriptLanguage.JAVASCRIPTはExtendScriptです)のはすごい着眼点ですね。気づきませんでした。
ただこれは、ExtendScriptが廃止されるまでは使えますが、将来的には使えなくなるかもしれないことを考えるとちょっと微妙ですね。
リンクをクリップボードにコピー
コピー完了
なるほど!
生暖かく見守る必要があるのですね。
confirmやpromptも使えない様ですが、そのうちに使える様になるのかな・・・
doScriptで引数を使いalertを使用する場合は
app.doScript(function(){
alert(arguments[0]);
}.toString().split("\r").slice(1,-1).join("\r"), ScriptLanguage.JAVASCRIPT, ["猫大好き"]);
の様な感じでしょうか
リンクをクリップボードにコピー
コピー完了
話がそれますが、現時点でのUXPScriptには致命的な問題があって、次のコードはExtendScriptでは最初のif文にヒットしますが、UXPScriptでは2番目でヒットします。
var doc = app.documents.add();
doc.documentPreferences.pageOrientation = 2003395685; //PageOrientation.LANDSCAPE
if (doc.documentPreferences.pageOrientation === 2003395685 &&
doc.documentPreferences.pageOrientation === PageOrientation.LANDSCAPE) {
alert("OK");
} else if (doc.documentPreferences.pageOrientation == "LANDSCAPE") {
alert("No!");
} else {
alert("What?");
}
function alert(error) {
var theDialog, theDialogCol;
theDialog = app.dialogs.add();
theDialog.canCancel = false;
theDialogCol = theDialog.dialogColumns.add();
theDialogCol.staticTexts.add({staticLabel: "" + error});
theDialog.show();
theDialog.destroy();
}
これが解消されないと、私としては使い物にならないんですよねえ。
リンクをクリップボードにコピー
コピー完了
InDesign PrereleaseのUXP-Scripting-Documentationにuse method equals()と有りますね
こういったのが、シンタックスシュガーが廃止されて、従来のExtendScriptとは扱いが異なる部分なのでしょうか
if(doc.documentPreferences.pageOrientation.equals(PageOrientation.LANDSCAPE))
とすると動きました。
リンクをクリップボードにコピー
コピー完了
プレリリースからの情報の引用は禁止事項です。ご注意を。
リンクをクリップボードにコピー
コピー完了
リリースされてからでもInDesign Prereleaseサイトの情報は問題あるのですね、気を付けます。
リンクをクリップボードにコピー
コピー完了
リンクをクリップボードにコピー
コピー完了
現状、サンプルの通りappクラス下のdialogを利用するのが良いのではないかと思います。
function alert(msg) {
theDialog = app.dialogs.add();
col = theDialog.dialogColumns.add();
colText = col.staticTexts.add();
colText.staticLabel = "" + msg;
theDialog.canCancel = false;
theDialog.show();
theDialog.destroy();
return;
}
って、被ってますけど、Omachiさんご指摘の通り現状は相当にBuggyな感じでまだまだExtendScriptと差し替える時期ではないですね。
リンクをクリップボードにコピー
コピー完了
なるほど!
confirmやpromptも自前で用意するのかな・・・