Hallo FS-Community,
langsam bin ich ziemlich am verzweifeln. Wir versuchen hier nun schon fast den ganzen Tag eine einfachste (!!!) AppCenter-Application zu erstellen. Hierbei sollen lediglich alle Teaser der zeit.de-Startseite mit einem Mouseover hinterlegt werden.
Das Problem ist jedoch, dass ich mich nicht durch den DOM-Baum bis zu den entsprechenden Elementen hangeln kann, da JEDES Element, dass ich vom BrowserHandler zurückbekomme ein class de.espirit.firstspirit.client.gui.applications.jxbrowser.Proxy-Objekt ist, mit dem man aber auch mal gerade gar nichts anfangen kann ...
Folgendes Skript verwenden wir (vom Wikipedia-Showcase geklaut und leicht abgewandelt):
import de.espirit.firstspirit.client.gui.applications.ApplicationService;
import de.espirit.firstspirit.client.gui.applications.browser.BrowserApplicationConfiguration;
import de.espirit.firstspirit.client.gui.applications.browser.EngineType;
import de.espirit.firstspirit.client.gui.applications.browser.BrowserApplication;
import de.espirit.firstspirit.access.ServicesBroker;
import de.espirit.firstspirit.agency.StoreAgent;
import de.espirit.firstspirit.agency.ResolutionAgent;
import de.espirit.firstspirit.access.store.Store;
import de.espirit.firstspirit.access.store.mediastore.Media;
import de.espirit.common.function.UnaryProcedure;
import javax.swing.ImageIcon;
import java.awt.datatransfer.DataFlavor;
import javax.swing.Action;
import de.espirit.firstspirit.agency.TransferAgent;
import de.espirit.common.crypto.Base64;
/* --- ElementDecorator --- */
onRegister(element, node) {
element.setAttribute("onmouseout", "this.style.backgroundColor='';");
element.setAttribute("onmouseover", "this.style.backgroundColor='#EAB9CC';");
}
/* --- Browser Listener --- */
onDocumentComplete(String url) {
nodeHandlerBuilder = browserApp.createNodeHandlerBuilder();
nodeHandlerBuilder.setElementDecorator(this);
doc = browserApp.getCurrentDocument(); //ist laut Logging bereits ein $Proxy88
mainElement = doc.getElementById("main");
nodeHandler = nodeHandlerBuilder.bind();
if (mainElement != null) {
childList = mainElement.getChildNodes();
for(int i = 0; i < childList.getLength(); i++) {
nodeHandler.register(childList.item(i), url); //jedes Item ist ein $Proxy93 und kann damit nicht an die register(Element, Node)-Methode weitergegeben werden...
}
}
}
// fall back method for not yet implemented calls
invoke(method, args) {
buf = new StringBuilder();
for (int i = 0; i < args.length; i++) {
buf.append(args[i]).append("(").append(args[i].getClass().getName()).append(")");
buf.append(",");
}
context.logDebug("not implemented yet: '" + method + "' args=" + args.length + " [" + buf.toString() + "]");
}
/* ============================ */
/* ========== Script ========== */
/* ============================ */
services = context.requireSpecialist(ServicesBroker.TYPE);
appService = services.getService(ApplicationService.class);
APP_IDENT = "ZEIT_APPCENTER";
// search url combined with text field value passed via FS_BUTTON in sectiontemplate: "Zeit_test"
url = "http://www.zeit.de/index";
// is there already a wikipedia search tab
existing = appService.getApplication(BrowserApplication.TYPE, APP_IDENT);
if (existing != null && !existing.isClosed()) {
// reuse existing tab
existing.setSelected();
existing.getApplication().openUrl(url);
} else {
// browser configuration
configuration = BrowserApplicationConfiguration.GENERATOR.invoke().
//icon(icon).
identifier(APP_IDENT).
title("Zeit App");
appTab = appService.openApplication(BrowserApplication.TYPE, configuration);
browserApp = appTab.getApplication();
browserApp.addBrowserListener(this);
browserApp.openUrl(url);
}
Was mache ich oder was läuft hier falsch? Warum kann ich nicht so etwas simples mittels Skript erledigen? Ich würde hierfür nicht unbedingt so gern ein eigenes Modul schreiben müssen. Und gibt es eine Möglichkeit Skript irgendwie zu debuggen? Es ist ein Krux sich selbst Error-Logs einzubauen, nur um dann zu merken, dass ein Skript in irgendeiner alten Version von vor 10min gestartet wurde obwohl es gespeichert, zurückgegeben und mind. 2min mit F5 bearbeitet wurde.
Viele Grüße aus Hamburg