hi,
try something like this: (I'm not sure if there is any "built in"
solution but this "native patch" should work ;) )
public class ReadyStateWatch {
public static enum ReadyState {
COMPLETE {
@Override public String toString() { return "complete";
}
},
LOADING {
@Override public String toString() { return "loading"; }
},
INTERACTIVE {
@Override public String toString() { return
"interactive"; }
},
UNINITIALIZED {
@Override public String toString() { return
"uninitialized"; }
}
}
Frame iframe;
public ReadyStateWatch(Frame iframe){
this.iframe = iframe;
addNativeReadyStateWatch(this,
iframe.getElement().<IFrameElement>
cast());
}
public HandlerRegistration addReadyStateChangeHandler(
ValueChangeHandler<ReadyState> handler) {
return iframe.addHandler(handler, ValueChangeEvent.getType());
}
public ReadyState getReadyState(){
try {
return
ReadyState.valueOf(iframe.getElement().getPropertyString("readyState"));
}
catch (Exception e) {
return null;
}
}
@SuppressWarnings("unused") //used in native function
private void fireReadyStateChange(){
iframe.fireEvent(new
ValueChangeEvent<ReadyState>(getReadyState())
{});
}
private static native void addNativeReadyStateWatch(ReadyStateWatch
self, IFrameElement e) /*-{
var handleStateChange = function(){
[email protected]::fireReadyStateChange()();
};
if (e.addEventListener) {
e.addEventListener("onreadystatechange",
handleStateChange, false);
}else if (e.attachEvent) {
e.attachEvent("onreadystatechange",handleStateChange);
}else{
e.onreadystatechange=handleStateChange;
}
}-*/;
}
--
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-web-toolkit?hl=en.