Die Host-Seite für meine Drittanbieter-App kann ein globales Objekt window.PageObject
haben. Wenn es vorhanden ist, muss meine App ihre Eigenschaften und Funktionen verwenden, auch wenn sie vorhanden sind. Ich habe mit einer Lösung mit JsInterop kommen, aber es erfordert mehrere Verfahren Erklärungen pro Objekt/Funktion:Wie verwende ich ein möglicherweise undefiniertes globales Objekt mit JsInterop?
@JsType(isNative=true, namespace=JsPackage.GLOBAL, name="PageObject")
public class PageObject {
private PageObject PageObject() {}
// called by every single public method
@JsProperty(namespace=JsPackage.GLOBAL, name="PageObject")
private static native boolean __isDefined();
// each property has a native accessor
@JsProperty(name="some_property")
private static native String _getSomeProperty();
// each property also has an overlay method that checks __isDefined()
@JsOverlay
public static String getSomeProperty() {
return __isDefined() ? _getSomeProperty() : null;
}
// calling a function safely requires an additional check to see if it exists
@JsProperty(name="some_procedure")
private static boolean _hasSomeProcedure();
@JsMethod(name="some_procedure")
private static native void _someProcedure();
@JsOverlay
public static void someProcedure() {
if (__isDefined() && _hasSomeProcedure()) {
_someProcedure();
}
}
}
Bin ich einen Teil JsInterop fehlt, die diese besser behandelt? Gibt es eine andere Lösung, die einfacher zu verwenden ist (außer JSNI)?