在 InDesign CC 2017 javascript 中,当使用 eventListener "afterOpen" 时,如何避免警告 "No documents are open."?

In InDesign CC 2017 javascript, when using the eventListener "afterOpen", how can I avoid the warning, "No documents are open."?

我将 InDesign CC 2017 与 Mac OS X El Capitan 一起使用,并希望在我的 Startup Scripts 文件夹中使用一个脚本,以便在每次打开文件时始终执行检查该文件的文件路径中的某个字符串。如果在文件路径中找到该字符串,我只想向用户显示一条消息。

选择要打开的文件后,我在加载文件之前收到警告。 "An attached script generated the following error: No documents are open. Do you want to disable this event handler?"

我认为有一个名为 "afterOpen" 的 eventListener,只有在文件打开后才会触发脚本,在这种情况下我认为我不应该收到警告。

我理想的解决方案是通过使用更合适的代码来避免警告(这是我希望你能帮助我的),但我也愿意让别人告诉我如何添加代码到简单地取消警告。

#targetengine "onAfterOpen"

main();
function main() {
   var myApplicationEventListener = app.eventListeners.add("afterOpen",myfunc);
}

function myfunc (myEvent) {
    var sPath = Folder.decode(app.activeDocument.filePath);

    if(sPath.indexOf("string in path") >= 0){
        alert("This file is the one mother warned you about.");
    } else {
        alert("This file is good to go!");
    }
}

在此先感谢您的帮助。 :)

随着事件在对象层次结构中冒泡,您需要确保事件父对象实际上是文档:

#targetengine "onAfterOpen"

main();
function main() {
 var ev = app.eventListeners.itemByName ( "onAfterOpen" );
 !ev.isValid && app.eventListeners.add("afterOpen",myfunc).name = "onAfterOpen";
}

function myfunc (myEvent) {
 
 var doc = myEvent.parent, sPath;
 if ( !( doc instanceof Document ) ) return;
 
 sPath = decodeURI(doc.properties.filePath);
 if ( !sPath ) return;

 alert( /string in path/.test ( sPath )? 
  "This file is the one mother warned you about." 
  : 
  "This file is good to go!"
 );
}