在InDesign CC 2017 javascript中,当使用eventListener“afterOpen”时,如何避免出现“没有文档打开”的警告?

时间:2017-06-13 20:25:27

标签: javascript startup event-listener adobe-indesign extendscript

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

选择要打开的文件后,我会在加载文件之前收到警告。 “附加脚本生成以下错误:没有文档打开。是否要禁用此事件处理程序?”

我想一个名为“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!");
    }
}

提前感谢您的帮助。 :)

1 个答案:

答案 0 :(得分:2)

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

#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!"
	);
}