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.