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.

Reply via email to