【发布时间】:2016-01-05 05:37:36
【问题描述】:
我想在内部插入 GWT 小部件,如 FlowPanel、HTMLPanel 和使用 GWT 的 iframe。我发现this 帖子将内容作为字符串插入到 iFrame 中。但是,当我想集成其他面板和小部件时,这无济于事。
我了解了如何以编程方式将 GWT 小部件和面板插入 GWT。这是我的做法:
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());
panel.setStyleName(resources.css().test()); // does not work
p1.getElement().addClassName(resources.css().test()); // does not work
}
};
}
我的 uiBinder:
<ui:with type="test.client.app.start.StartView.Resources" field="resources" />
<ui:with type="test.client.messages.Messages" field="messages" />
<g:FlowPanel ui:field="outerPanel" addStyleNames="{resources.css.outerBox}">
</g:FlowPanel>
之前的代码将 GWT 面板插入到 iframe 中。问题是我无法设置任何 CSS 样式。即使我使用以下方式设置样式:
panel.setStyleName(resources.css().test()); // does not work
p1.getElement().addClassName(resources.css().test()); // does not work
这两种变体都不起作用。我知道我可以在 iframe 文档的头部注入一个通用的 css 文件,但我想使用 GWT 资源。
如何使用 CSS/GSS 资源为 iframe 内的面板设置样式?
【问题讨论】:
-
你真的需要 iFrame 吗?我认为新创建的 iFrame 与您的 GWT 应用程序具有不同的域。所以你会遇到 SOP 的问题。我建议使用 div - 如果可能的话。
-
我想创建一个嵌入到不同页面的插件。所以我只能用iframe来保证我自己的css。
-
不同的页面是否为您的插件提供了一个区域?不同的页面与您的应用无关?
-
请在此处查看聊天小部件:livechatinc.com 这是一个很好的例子。您需要一个 iframe,以使页面的 css 不会覆盖或影响您的 css。
标签: javascript java html iframe gwt