終了

UXPScriptingのdoScriptについて

積極的な参加者 ,
Oct 23, 2022 Oct 23, 2022

リンクをクリップボードにコピー

コピー完了

UXPScriptingでalertが使いたかったので、以下の様にしたのですが

app.doScript(function(){alert("猫大好き");}, ScriptLanguage.JAVASCRIPT);

エラーが出ます。

何が間違っているのでしょうか、それとも不具合でしょうか?

 

app.doScript("alert('猫大好き');", ScriptLanguage.JAVASCRIPT);

だと大丈夫ですが、使いずらいです・・・

キーワード
スクリプティング

表示

848

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Oct 23, 2022 Oct 23, 2022

リンクをクリップボードにコピー

コピー完了

UXPScriptに移行しても制御構造はほとんど同じなので普通の構成ならdoScriptを使う必要はないかと思います。しかし、UXPScriptでは様々な部分でシンタックスシュガーが廃止されていますので従来のExtendScriptとは扱いが異なる部分は多いです。このへんは慣れないと致し方ないことでしょう。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Oct 23, 2022 Oct 23, 2022

リンクをクリップボードにコピー

コピー完了

シンタックスシュガー、初めて聞く言葉です・・・

 

app.doScript(function(){
    alert("猫大好き");
}.toString().split("\r").slice(1,-1).join("\r"), ScriptLanguage.JAVASCRIPT);

この形にすると動きましたが、これが最良かどうか・・・

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Oct 24, 2022 Oct 24, 2022

リンクをクリップボードにコピー

コピー完了

UXPScriptはまだ実装途中で完成していないと考えてください。ですからまだ仕様とも不具合とも言えない部分が多く存在する気がします。

 

UXPScriptのdoScript()メソッドの最初の引数ですが、値としては

・文字列

・ファイル

・関数

を指定できるはずなのですが、現時点では「文字列」しか受け付けていない感じですね。

ですから別の返信で「.toString()」を付けているように、文字列にすると動作することになるわけですね。

 

UXPScriptではalert()が使えないので、doScript()を使用してExtendScriptを呼び出している(2つ目の引数のScriptLanguage.JAVASCRIPTはExtendScriptです)のはすごい着眼点ですね。気づきませんでした。

ただこれは、ExtendScriptが廃止されるまでは使えますが、将来的には使えなくなるかもしれないことを考えるとちょっと微妙ですね。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Oct 24, 2022 Oct 24, 2022

リンクをクリップボードにコピー

コピー完了

なるほど!

生暖かく見守る必要があるのですね。

 

confirmやpromptも使えない様ですが、そのうちに使える様になるのかな・・・

 

doScriptで引数を使いalertを使用する場合は

app.doScript(function(){
    alert(arguments[0]);
}.toString().split("\r").slice(1,-1).join("\r"), ScriptLanguage.JAVASCRIPT, ["猫大好き"]);

 の様な感じでしょうか

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Oct 24, 2022 Oct 24, 2022

リンクをクリップボードにコピー

コピー完了

話がそれますが、現時点での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();
}

これが解消されないと、私としては使い物にならないんですよねえ。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Oct 26, 2022 Oct 26, 2022

リンクをクリップボードにコピー

コピー完了

InDesign PrereleaseのUXP-Scripting-Documentationにuse method equals()と有りますね
こういったのが、シンタックスシュガーが廃止されて、従来のExtendScriptとは扱いが異なる部分なのでしょうか

if(doc.documentPreferences.pageOrientation.equals(PageOrientation.LANDSCAPE))

とすると動きました。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Oct 26, 2022 Oct 26, 2022

リンクをクリップボードにコピー

コピー完了

プレリリースからの情報の引用は禁止事項です。ご注意を。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Oct 26, 2022 Oct 26, 2022

リンクをクリップボードにコピー

コピー完了

リリースされてからでもInDesign Prereleaseサイトの情報は問題あるのですね、気を付けます。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Oct 26, 2022 Oct 26, 2022

リンクをクリップボードにコピー

コピー完了

最新

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Oct 24, 2022 Oct 24, 2022

リンクをクリップボードにコピー

コピー完了

現状、サンプルの通り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と差し替える時期ではないですね。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Oct 24, 2022 Oct 24, 2022

リンクをクリップボードにコピー

コピー完了

なるほど!

confirmやpromptも自前で用意するのかな・・・

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines