addEventListener仅在第一次执行JSX

时间:2016-12-27 09:15:36

标签: javascript photoshop jsx photoshop-script

正如主题建议在测试一些监听器时我发现了这种奇怪的行为: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功能中添加警告,确保每次更改文档时都不会弹出窗口,但只是第一次。

你玩过这些活动吗?你能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

使用innerText代替innerHTML

在几乎所有情况下都应该避免使用innerHTML,因为它基本上创建了一个全新的元素。最好直接在现有元素上设置样式,属性或文本更改