正如主题建议在测试一些监听器时我发现了这种奇怪的行为:addEventListener确实被触发,回调被调用但是调用JSX的evalScript只是第一次运行。
我正是这样做的:
ext.JS
function doSomething(){
document.getElementById("placeholder").innerHTML += "+";
csInterface.evalScript("JSXdoSomething",
function(result){
document.getElementById("docName").innerHTML += result + ", ";
});
}
var csInterface = new CSInterface();
csInterface.addEventListener("documentAfterActivate",doSomething);
我在JSX中:
JSXdoSomething = pleaseDo()
function pleaseDo(){
return app.activeDocument.name;
}
现在,当在文档之间切换时,每次都会执行此行:
document.getElementById("placeholder").innerHTML += "+";
但 evalScript 仅在第一次使用。
PSA:如果您已经打开了一个文档并且打开了扩展文档,则会触发“激活”。
例如为:
我们打开了2个文件:Doc1和Doc2,我在两者之间切换的输出:
的"占位符" = ++++++ ......
的" DOCNAME" = Doc1,Doc1,Doc1,Doc1 ......
我也试图以这种方式调用evalScript:
a)csInterface.evalScript(" pleaseDo" ...
或
b)csInterface.evalScript(" pleaseDo()" ...
对于 a)我得到与上述相同的行为,对于 b)我得到了" EvalScript错误。"
我试图以这种方式改变JSX:
$._doSomething = function(){
return app.activeDocument.name;
}
并称之为:
csInterface.evalScript(" $ ._ doSomething" ...
我得到了与以前相同的行为:evalScript仅在第一次执行时以及随后的时间,返回中存储的值始终是第一个Document的名称。
我还尝试在JSX功能中添加警告,确保每次更改文档时都不会弹出窗口,但只是第一次。
你玩过这些活动吗?你能指出我正确的方向吗?
答案 0 :(得分:0)
innerText
代替innerHTML
在几乎所有情况下都应该避免使用innerHTML,因为它基本上创建了一个全新的元素。最好直接在现有元素上设置样式,属性或文本更改