こんにちは
インデザイン上でJavaScriptをショートカットで実行した際の挙動について質問させて下さい。
環境は以下の通りです。
macOS Mojave v10.14.6
Indesign2021 v16.4
スクリプトの内容は以下の通りです。
・別ファイルからスタイルの読み込み
・アクティブドキュメントをPDFに書き出し
・アクティブドキュメントを閉じる
エラーの内容は以下の通りです。
JavaScriptエラーです!
エラー番号:90884
エラー文字列:開かれているドキュメントがありません。
スクリプトパネルから該当のスクリプトをダブルクリックで実行すると何の問題も無く動いてくれるのですが、ショートカットで実行するとエラーが出ます。
activeDocument.close()した直後にもう一度1番最初からスクリプトを読み直していることを確認しました。
何故このような振る舞いをするのか、また、どのように回避すれば良いのかをご教授下さい。
よろしくお願いします。
[20664] GP◆wXSMC49jR. (2021/11/02 Tue 16:42)
> ・別ファイルからスタイルの読み込み
> ・アクティブドキュメントをPDFに書き出し
> ・アクティブドキュメントを閉じる
>
> エラー文字列:開かれているドキュメントがありません。
これだけだと判断に苦しむところですが
エラー文字列と一緒に、何行目でエラーが発生したのか表示されるので参考にしましょう。何も始まらないうちから1行目などでこけている場合は,確かに何かがおかしいってことになります。
最初に思い当たったのは、そのショートカットが他の処理にも適用されていないか、という可能性なんですが(二重登録できたかどうか記憶が定かでないのですが)。
問題のスクリプトのいちばん上に
alert(decodeURI(app.activeScript.name));
を追加して、ショートカット実行した直後にスクリプト名がアラート出るか確認、というのをやってみてもらえますか?
[20666] (z-) (2021/11/04 Thu 10:19)
(z-)さん、返信ありがとうございます。
> これだけだと判断に苦しむところですが
> エラー文字列と一緒に、何行目でエラーが発生したのか表示されるので参考にしましょう。何も始まらないうちから1行目などでこけている場合は,確かに何かがおかしいってことになります。
エラーを出している行は「activeDocument」を記述している1番最初の行になります。
また、「app.documents[0]」に書き換えてもエラーの内容が後述のものに変わるだけでした。(エラー番号:45、エラー文字列:Object is invalid)
スクリプトに記述している3つの機能自体はショートカットからでもダブルクリックでも上手く動いてくれているのですが、前者の場合にのみ、ドキュメントが閉じられた直後にエラーが出てしまいます。
> 最初に思い当たったのは、そのショートカットが他の処理にも適用されていないか、という可能性なんですが(二重登録できたかどうか記憶が定かでないのですが)。
macOSとIndesignの両方で重複していないことを確認しました。
> 問題のスクリプトのいちばん上に
> alert(decodeURI(app.activeScript.name));
> を追加して、ショートカット実行した直後にスクリプト名がアラート出るか確認、というのをやってみてもらえますか?
スクリプト名がアラートに出ていることを確認しましたが、同時にエラーも出なくなってしまいました。
色々試してみたところ、どうやら一度でもダイアログを表示するとエラーが出なくなるようです。
新たにダイアログを表示することでスクリプト自体は上手く動いてくれることが分かりました。
しかし欲を言いますと、ショートカットキーひとつだけで実行したいのです。
どうか知恵をお貸し下さいますよう、お願い申し上げます。
[20667] GP◆wXSMC49jR. (2021/11/04 Thu 12:13)
せめてその一行目が正確にわからないと答えようがないですよ。
[20668] -e (2021/11/04 Thu 13:17)
-eさん、返信ありがとうございます。
> せめてその一行目が正確にわからないと答えようがないですよ。
その一行目というのはエラーが発生している行でお間違いないですよね。
エラー発生行は「app.activeDocument」と記述している1番最初の行になります。
「const myDocument = app.activeDocument」と変数宣言をした場合にはその変数宣言をしている行がエラー発生行になります。
また、「app.activeDocument」を「app.documents[0]」と言い換えた場合においてもエラーの内容が変わるだけでエラー自体は出てしまいます。
しかし、スクリプトパネルからダブルクリックでスクリプトを実行した場合には、何の問題も無く動作してくれますので、スクリプト自体には問題が無いと考えています。
つまり、ショートカットキーで実行し、かつスクリプトの動作中にダイアログが表示されなかった場合にのみ、動作をした後にエラーが表示されてしまうということです。
[20669] GP◆wXSMC49jR. (2021/11/04 Thu 14:39)
const myDocument = app.activeDocument
のみのスクリプトで試してもエラーが出れば単なるINDDのバグという可能性もありますね。
[20670] -e (2021/11/04 Thu 14:54)
-eさん、すぐさま返信して頂きありがとうございます。
> const myDocument = app.activeDocument
> のみのスクリプトで試してもエラーが出れば単なるINDDのバグという可能性もありますね。
そのままコピペして試してみましたが、何のエラーも出ませんでした。
[20671] GP◆wXSMC49jR. (2021/11/04 Thu 15:00)
ではエラーの原因は別にある可能性もありますね。
でもアラート入れると動くなら単なるバグな気もします。
以下のどちらかで解決しませんかね?
1.(z-)さんのalert(decodeURI(app.activeScript.name))の代わりにapp.activeScript.nameのみ入れて実行
2.ショートカットの割り当てキーを他のキーにしてみる。
[20672] -e (2021/11/04 Thu 15:11)
-eさん、返信ありがとうございます。
前者で指示されている内容はalert()のカッコ内を「app.activeScript.name」で置換して実行、ということですよね。
アラートダイアログの内容以外に変化はありませんでした。
後者で上手くいきました。ありがとうございます。
ショートカットキーにF19、文字キーひとつを割り当てていたのが原因だと思われます。
スクリプトの実行がメニューコマンド扱いであるとは思いもしませんでした。
アドビ公式のヘルプで注意されている初歩的な部分でつまづいていたようでお恥ずかしい限りです。
(z-)さんと-eさんのお二人には、このような初歩的なミスにも親切にご指導頂き誠にありがとうございます。
[20673] GP◆wXSMC49jR. (2021/11/04 Thu 16:00)
続け様の投稿申し訳ありません。
Control、Shift、Option、Command、の各4つとF19キーとを組み合わせショートカットキーとして実行した結果、Commandを含めた場合にのみ意図した結果が得られることを確認致しました。
不思議な現象に感じられるのですが、こういうものなのでしょうか。
[20674] GP◆wXSMC49jR. (2021/11/04 Thu 16:18)
ショートカットのキーの組み合わせについてはわかりませんが、
キーの検証を行うときは別の単純なスクリプトで試すなどしてみたほうがよいです。
ショートカットが原因なのか、スクリプト中の何らかのバグが絡んでいるのか
部分的な切り分けをしないとエラーの原因に辿りつけない場合が多いので。
ちなみに以下はalert〜の代わりにapp.activeScript.nameを入れるという意味で書きました。
alertを出さずとも何かの処理を実行する事がトリガーになっているのかと思ったので。
今回はもうどうでもよい話ですが。
>alert(decodeURI(app.activeScript.name))の代わりにapp.activeScript.nameのみ入れて実行
[20675] -e (2021/11/05 Fri 09:29)
> Control、Shift、Option、Command、の各4つとF19キーとを組み合わせショートカットキーとして実行した結果、Commandを含めた場合にのみ意図した結果が得られることを確認致しました。
F19ですか…思い至りませんでした。
F16以降で同様の不具合だったりするんでしょうか?
[20677] (z-) (2021/11/08 Mon 12:10)
-eさん、(z-)さん、返信ありがとうございます。
> > Control、Shift、Option、Command、の各4つとF19キーとを組み合わせショートカットキーとして実行した結果、Commandを含めた場合にのみ意図した結果が得られることを確認致しました。
>
> F19ですか…思い至りませんでした。
> F16以降で同様の不具合だったりするんでしょうか?
ファンクションキー以外のキーとの組み合わせも試してみましたが、同様の結果が得られました。
Adobeソフトやスクリプトなどは初めて触るので、キーの設定ひとつが原因でこのような不思議なことが起こってしまうとは思いもしませんでした。
現在把握している不具合の再現条件は以下の3点です。
・Commandを含まないショートカットキーでスクリプトを実行
・スクリプト内にapp.activeDocument.close()を含む
・app.activeDocument.close()までにダイアログが表示されない
また、app.activeDocument.close()の次の行にexit()を記述しているにも関わらずスクリプトが終了しないことから、app.activeDocument.close()の瞬間にエラーが発生しているのであろうと考えています。
[20678] GP◆wXSMC49jR. (2021/11/11 Thu 17:05)