[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt eventListener Problem (Indesign CS4, JS, Mac)

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

eventListener Problem (Indesign CS4, JS, Mac)

pixelstaub
Beiträge gesamt: 128

30. Jan 2011, 13:11
Beitrag # 1 von 7
Bewertung:
(3149 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Liebes Forum,

ich versuche gerade einen eventListener zu basteln. Das funktioniert – allerdings nur solange dieser via Startup-Script initialisiert wird.
Code
main(); 
function main()
{
var myEventListener1 = app.addEventListener("afterNew", alertfunction, false);
}


function alertfunction()
{
alert ("eventListener afterNew");
}

Allerdings benötige ich ihn nur im aktiven Dokument und auch nur, wenn ich ein spezielles Skript starte. Der folgende Code funktioniert nicht …

Code
#targetengine "session" 

var myDoc = app.activeDocument;
myDoc.eventListeners.everyItem().remove();
myDoc.addEventListener("afterNew", function (){
alert ("eventListener afterNew");
}
);
var el = myDoc.eventListeners[0].isValid;
alert (el);


Starte ich obiges Skript, bekomme ich den folgenden
Zitat JavaScript Fehler "Fehlernummer: 30476 – Fehlerzeichenfolge: Die angeforderte Aktion konnte nicht ausgeführt werden, da das Objekt nicht mehr existiert.".


Irgendjemand eine Idee, woran das liegen kann?
Dankbar für jeden Tipp grüßt aus Köln
Stephan
X

eventListener Problem (Indesign CS4, JS, Mac)

pixelstaub
Beiträge gesamt: 128

2. Feb 2011, 13:09
Beitrag # 2 von 7
Beitrag ID: #463556
Bewertung:
(3094 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
… niemand eine Idee – oder habe ich mich unverständlich ausgedrückt?
Das Problem: Initialisiere ich den EventListener per StartupScript, funktioniert alles reibungslos.
Baue ich ihn jedoch in ein User-Skript, das ich über die Skripten-Palette starte, bekomme ich die obige Fehlermeldung (bei jeglicher Art von EventListener).

Dankbar für jeden Tipp grüßt
Stephan


als Antwort auf: [#463257]

eventListener Problem (Indesign CS4, JS, Mac)

Neil77
Beiträge gesamt: 287

2. Feb 2011, 13:26
Beitrag # 3 von 7
Beitrag ID: #463558
Bewertung:
(3091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,

hast du das erste Script auch noch im Startup-Ordner? Wenn ja: In der von dir angegebenen Form führt das auch bei mir zu diesem Fehler: die #targetengine fehlt nämlich.

Das zweite Skript ergibt dagegen keine Fehlermeldung – hat aber auch keine Auswirkung, da das afterNew-Event sich im gleichen, schon existierenden Dokument nicht auswirken kann ...

Grüße, Martin


als Antwort auf: [#463556]

eventListener Problem (Indesign CS4, JS, Mac)

pixelstaub
Beiträge gesamt: 128

2. Feb 2011, 13:43
Beitrag # 4 von 7
Beitrag ID: #463561
Bewertung:
(3084 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

danke für Deine Antwort. Ja, das Startup-Script ist raus. Ich habe im zweiten Skript das gleiche auch mal mit dem AfterSaveAs-Listener ausprobiert, bekomme da aber auch die oben erwähnte Fehlermeldung.

Im ersten habe ich vergessen, die #targetengine-Zeile mit zu kopieren, sorry ...

Grüße und danke
Stephan


als Antwort auf: [#463558]

eventListener Problem (Indesign CS4, JS, Mac)

flobuc
Beiträge gesamt: 246

2. Feb 2011, 14:19
Beitrag # 5 von 7
Beitrag ID: #463567
Bewertung:
(3063 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,

ich hab das Skript gerade unter CS5/Windows (hab gerade nichts anderes da) getestet: Funktioniert einwandfrei.

Code
#targetengine "session"  

var myDoc = app.activeDocument;
myDoc.eventListeners.everyItem().remove();
myDoc.addEventListener("afterSaveAs", function (){
alert ("eventListener afterSaveAs");
}
);
var el = myDoc.eventListeners[0].isValid;
alert (el);


Gruss

Flo


als Antwort auf: [#463561]

eventListener Problem (Indesign CS4, JS, Mac)

pixelstaub
Beiträge gesamt: 128

2. Feb 2011, 16:36
Beitrag # 6 von 7
Beitrag ID: #463583
Bewertung:
(3030 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Flo,

Du hast recht – in CS5 funktioniert es problemlos (ich habe es eben dort mal probeweise getestet). In CS4 – wo ich es brauche (denn der Rest des Scripts läuft nur mit CS4) hingegen versagt es mir nach wie vor den Dienst …

Grüße und danke für den Tipp
Stephan


als Antwort auf: [#463567]

eventListener Problem (Indesign CS4, JS, Mac)

pixelstaub
Beiträge gesamt: 128

8. Feb 2011, 14:07
Beitrag # 7 von 7
Beitrag ID: #464148
Bewertung:
(2964 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Für alle, die es interessiert:
Ich habe es nun hinbekommen. Der Listener wird via Startup-Script an die app angehängt.
Das eigentliche Script (in dem ich den Listener hinzufüngen), setzt nun eine Textvariable "log", schreibt eine Logdatei und deren Pfad+Namen in die "log"-Text-Variable.Siehe unten Script 1:
Die Funktion nach dem afterSaveEvent wird jetzt nur aufgerufen, wenn im Dokument die Textvariable "log existiert und schreibt dann zusätzlich die platzierten Bilder, deren Rahmen mit einem Skriptlabel versehen ist in die Logdatei.

Skript1:
Code
if (app.documents[0].textVariables.item("log").isValid == false) 
{
var _newTextVar = app.documents[0].textVariables.add();
_newTextVar.name = "log";
...
var myString = meineDatei; // enthält den Pfad einer platzierten RTF-Datei
var mySplitResult = myString.split("/"); // trennt myFile in einen Array auf (trenner ist eintrag in der Klammer)
var letzterSplit = mySplitResult.length -1; // holt sich den letzten Eintrag des Arrays = der Dateiname
var myString = mySplitResult[letzterSplit]; // myString ist nun Dateiname
var mySplitResult = myString.split(".rtf"); // splittet das .rtf vom Dateinamen ab
var LogFileName_d = mySplitResult[0].toString();
var myLogFile = new File(meinOrdner + "/" + LogFileName_d + "_LOG_" + ".txt");
app.documents[0].textVariables.item("log").variableOptions.contents = myLogFile; // schreibt den Pfad des Log-Files in die Textvariable "log"
if (myLogFile.open("a") == true){myLogFile.write(LogString);
myLogFile.close();
}
};


Skript2 – Schreibt in das existierende Log-File alle platzierten Bilder (für die Rahmen, deren Skriptbezeichner im Array Bildrahmen existiert). Skript liegt im Startup-Scripts-Folder
Code
#targetengine "session" 
app.eventListeners.everyItem().remove();
EventlistenerAfterSafeAs()

function EventlistenerAfterSafeAs()
{
var myEventListener = app.addEventListener("afterSaveAs", myAfterSaveBildLog, false);
}

function myAfterSaveBildLog()
{
if (app.documents[0].textVariables.item("log").isValid == true){
var meinBildLogFile = app.documents[0].textVariables.item("log").variableOptions.contents // enthält den Dateipfad der zuvor erstellten Logdatei
var myLogFile = new File(meinBildLogFile);
var LogString = new Array("\rB I L D E R :\r");
var Bildrahmen = new Array("Titelbild", "Bild1", "Bild2", "Bild3", "Bild4", "Bild5", "Bild6", "Bild7", "Bild8");
var AnzahlBilder = Bildrahmen.length;
for (var i = 0; i <= AnzahlBilder; i++)
{
try {
var y = app.activeDocument.pageItems.item(Bildrahmen[i]).images[0].itemLink.name;
var z = (app.activeDocument.pageItems.item(Bildrahmen[i]).images[0].effectivePpi).toString();
var u = ("Bild" + i + ":" + y + " -> " + z + " ppi" + "\t" + "\r").toString();
LogString.push(u);
} catch(e) { }
};

if (myLogFile.open("a") == true)
{ myLogFile.write(LogString);
myLogFile.close();
}
}
}



als Antwort auf: [#463583]
X