HTML and CSS Reference
In-Depth Information
private boolean clientReady = false;
private StringBuilder scriptBuffer = null;
private void evalOnReady( String script ) {
if( clientReady ) {
browser.evaluate( script );
} else {
if( scriptBuffer == null ) {
scriptBuffer = new StringBuilder();
}
scriptBuffer.append( script );
}
}
Listing 3.4
Um das gespeicherte Skript auszuführen, erstellen wir im Konstruktor eine Browserfunktion, die
vom Initialisierungsskript zum geeigneten Zeitpunkt (hier in dem
"dataReady"
-Event der
CKEditor
-
Instanz) aufgerufen wird (Listing 3.5). Nun müssen wir noch
setText
und
getText
(und alle künftigen
Setter und Getter) so anpassen, dass sie
evalOnReady
anstatt
eval
verwenden. Listing 3.6 zeigt die
endgültige Implementierung. Damit verhält sich das Custom Widget für den Anwendungsentwick-
ler immer wie erwartet. Es sei darauf hingewiesen, dass das Zurücksetzen des
clientReady-
Feldes
in
setText
in diesem Beispiel nur notwendig ist, da
editor.instance.setData
selbst asynchron arbeitet
und die Browserfunktion später implizit erneut aufruft. Bei sonstigen, synchron agierenden Funktio-
nen kann das Feld auf
true
belassen werden.
new BrowserFunction( browser, "rap_ready" ) {
public Object function( Object[] arguments ) {
if( scriptBuffer != null ) {
browser.evaluate( scriptBuffer.toString() );
scriptBuffer = null;
}
clientReady = true;
return null;
}
};
Listing 3.5