On Monday, January 4, 2016 at 8:31:56 PM UTC+1, confile wrote:
>
> I want to insert GWT Widgets like FlowPanel, HTMLPanel inside and iframe 
> using GWT.
>

TL;DR: you can't.

 

> I find out how to insert GWT Widgets and Panels programmatically into GWT. 
> Here is how I do it:
>
>
>   public interface Resources extends ClientBundle {
>
>     @Source({Css.DEFAULT_CSS})
>     Css css();
>
>   }
>
>   public interface Css extends CssResource {
>
>     String DEFAULT_CSS = "test/client/app/start/StartView.gss";
>
>     String outerBox();
>     String iframe();
>     String test();
>
>   }
>
>   @UiField(provided = true)
>   Resources resources;
>
>   @UiField(provided = true)
>   Messages messages;
>
>   @Inject
>   public StartView(final Binder binder, Resources resources, Messages 
> messages)    
>   {
>     this.resources = resources;
>     resources.css().ensureInjected();
>     this.messages = messages;
>     initWidget(binder.createAndBindUi(this));
>
>     final IFrameElement iframe = Document.get().createIFrameElement();
>     FlowPanel innerBox = new FlowPanel() {
>        @Override
>        protected void onLoad() {
>          super.onLoad();
>
>          FlowPanel p1 = new FlowPanel();
>          p1.addStyleName(resources.css().test());
>
>          HTMLPanel panel = new HTMLPanel("Hello World!");
>          panel.setStyleName(resources.css().test());  // does not work
>          p1.add(panel);
>
>          final Document doc = iframe.getContentDocument();
>          BodyElement body = doc.getBody();
>
>          body.appendChild(p1.getElement());
>
>
When doing this, you're neutralizing event handling on the widgets, making 
many of them unusable.

What you need to do is either:

   - load a GWT app into the iframe and communicate with it to make it 
   build the UI you're expecting
   - or only "inject" elements into the frame, not widgets.

But one has to wonder why you want to use an iframe to begin with…

 

>
>          panel.setStyleName(resources.css().test());  // does not work
>          p1.getElement().addClassName(resources.css().test()); // does not 
> work
>
>        }
>     };
>   }
>
> The former code inserts GWT Panels into an iframe. The problem is that I 
> cannot set any css style. Even if I set the style with:
>
> panel.setStyleName(resources.css().test());  // does not work
> p1.getElement().addClassName(resources.css().test()); // does not work
>
> both variants do not work. I know I can inject a general css file in the 
> head of the iframe document, but I want to use the GWT resources.
>
> *How can I set the styles using CSS/GSS Resources for the Panels inside 
> the iframe?*
>
As Grzegorz Nowak said, you need to inject your stylesheet into the iframe 
first; it's as easy as creating a <style> element and setting its content 
to resources.css().getText() (which is basically what ensureInjected() does 
in $doc / Document.get()) 

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Contributors" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/4c40733b-3f65-40d7-8e3d-348a90e10213%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to