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
Search WWH ::




Custom Search