addEventListener execute JSX only the first time

Discussion of Photoshop Scripting, Photoshop Actions and Photoshop Automation in General

Moderators: Tom, Kukurykus

ApWizard
Posts: 9
Joined: Fri Dec 16, 2016 7:39 am

addEventListener execute JSX only the first time

Post by ApWizard »

Hi,
as the subject suggests while testing some listener I found this strange behavior: the addEventListener does get triggered, the callback get called but the evalScript invoking the JSX runs only the first time.

This is how I'm doing it:
ext.JS:

Code: Select all

function doSomething(){
document.getElementById("placeholder").innerHTML += "+";
csInterface.evalScript("JSXdoSomething",
function(result){
document.getElementById("docName").innerHTML += result + ", ";
});
}

var csInterface = new CSInterface();
csInterface.addEventListener("documentAfterActivate",doSomething);
in the JSX I have:

Code: Select all

JSXdoSomething = pleaseDo()
function pleaseDo(){
return app.activeDocument.name
}


now, when switching between documents, this line get executed every time:

Code: Select all

document.getElementById("placeholder").innerHTML += "+";
but the evalScript works only the first time.

PSA: if you already have a document opened and you open the extension documentAfterActivate gets fired.

E.g.:
we have 2 documents open: Doc1 and Doc2
the output I'm getting while switching between the two:
"placeholder" = ++++++...
"docName" = Doc1, Doc1, Doc1, Doc1...

I've also tried to call the evalScript in this way:
a) csInterface.evalScript("pleaseDo" ...
or
b) csInterface.evalScript("pleaseDo()" ...

for a) I get the same behavior as described above and for b) I get "EvalScript Error."

I tried to change the JSX in this way:

Code: Select all


$._doSomething = function(){
return app.activeDocument.name;
}
and call it like this:
csInterface.evalScript("$._doSomething" ...

I get the same behavior as before: the evalScript get executed only the first time and for the subsequent times the value stored in the return is always the name of the first Document. I've also tried to put an alert in the JSX function and sure enough I don't get the pop-up every time I change the document but only the first time.

Have you played with the events? Can you point me in the right direction? :)