I'm not sure about this particular issue, but this is a well known problem when injecting Flash into IE DOM. IE will not only restart/reinitialize ActiveX plugins when you move nodes around the DOM, it will also do it when you set display: none|block, which causes havoc if you put a widget into something like a stack panel or tab panel. The only solution I've found is to have the plugin serialize state to GWT, and then restore it whenever it boots up.
See the attach() function here: http://code.google.com/p/gwt-chronoscope/source/browse/trunk/chronoscope/src/main/java/org/timepedia/chronoscope/client/browser/flashcanvas/FlashCanvas.java When Flash starts up, it calls into my GWT app. If it is the first time, then the app continues initialization. If it is the second time, it means IE has restarted the SWF, so resyncLayers() is called, which causes my app to push all of the state back to the plugin. I tried ways of getting around this, like creating a proxy widget is attached and controls the Flash widget which lives as an absolutely positioned element of <body>, and then trying to look for the proxy being hidden and hiding the Flash layer by moving it offscreen, but it is laggy and you still get into situations where IE can spontaneously restart your SWF sometimes. -Ray On Wed, Dec 16, 2009 at 4:27 AM, djd <[email protected]> wrote: > Jarrod, you could try to code 2 versions of that class, say > UploaderWidget and UploaderWidgetIE, and dinamically switch from one > to another with (almost) the same rules > > On Dec 15, 8:13 pm, jarrod <[email protected]> wrote: >> Actually, I was just struggling with this a bit... I have my two >> ui.xml templates setup, but I can't seem to get GWT.create() to select >> the right one. Here's what I tried: >> >> @UiTemplate("JavaApplet.ui.xml") >> interface JavaApplet extends UiBinder<Element, UploaderWidget> { >> >> } >> >> @UiTemplate("JavaAppletIE.ui.xml") >> interface JavaAppletIE extends JavaApplet { >> >> } >> >> JavaApplet binder = GWT.create(JavaApplet.class); >> >> The following rules were defined in my module: >> <replace-with >> class="com.playonsports.web.uploader.client.JavaAppletIE"> >> <when-type-is >> class="com.playonsports.web.uploader.client.JavaApplet" /> >> <any> >> <when-property-is name="user.agent" value="ie6" /> >> <when-property-is name="user.agent" value="ie8" /> >> </any> >> </replace-with> >> >> But unfortunately, I just get compiler errors: >> 12/15/09 12:45:14 PM EST: [INFO] Compiling module >> com.playonsports.web.uploader.Uploader >> 12/15/09 12:45:21 PM EST: [INFO] [ERROR] Errors in 'file:/C:/Users/ >> jcarlson/Projects/com.playonsports.web.uploader/src/main/java/com/ >> playonsports/web/uploader/client/UploaderWidget.java' >> 12/15/09 12:45:21 PM EST: [INFO] [ERROR] Line 16: Rebind result >> 'com.playonsports.web.uploader.client.JavaAppletIE' must be a class >> 12/15/09 12:45:21 PM EST: [INFO] [ERROR] Cannot proceed due to >> previous errors >> >> I guess that makes sense, but how does one get around this? >> >> On Dec 15, 11:44 am, John Tamplin <[email protected]> wrote: >> >> >> >> > On Tue, Dec 15, 2009 at 11:29 AM, jarrod <[email protected]> wrote: >> > > Combined with the ability to use different ui.xml templates documented >> > > here: >> >> > >http://code.google.com/webtoolkit/doc/latest/DevGuideUiBinder.html#Ap... >> > > I should be able to declare one ui.xml for IE and another for >> > > everything else. I'll try that next and that would really simplify >> > > things. >> >> > Speaking of that example, shouldn't the GWT.create calls refer to >> > RedBinder/BlueBinder? >> >> > -- >> > John A. Tamplin >> > Software Engineer (GWT), Google > > -- > http://groups.google.com/group/Google-Web-Toolkit-Contributors -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
