1

我有一个专门针对 IE9 的 JavaScript 修复程序,并且只想为那个浏览器将它加载到我的项目中。我想我也许可以在我的 .gwt.xml 中做这样的事情:

<script src="ie9svgfix.js">
    <when-property-is name="user.agent" value="ie9"/>
</script>

但不幸的是,这不起作用。有人知道在 GWT 中执行此操作的干净方法吗?

谢谢,

乔恩

4

2 回答 2

3

GWT 中最简洁的方法是使用延迟绑定并ScriptInjector在 IE9 排列中注入脚本;或者让主机页面加载脚本,在这种情况下,您可以使用条件注释(如 Stano 建议的那样)。

使用延迟绑定,您必须使用 IE9 的特定实现创建一个“延迟绑定”类。

class SvgFix {
  public void fix() { /* no op */ }
}

class SvgFixIE9 {
  @Override
  public void fix() {
    ScriptInjector.fromUrl(GWT.getModuleBaseForStaticFiles() + "ie9svgfix.js")
        .setWindow(ScriptInjector.TOP_WINDOW)
        .inject();
  }
}

在您的 中EntryPoint,注入脚本:

GWT.<SvgFix>create(SvgFix.class).fix();

最后再根据排列选择合适的实现:

<replace-with class="com.example.client.SvgFixIE9">
  <when-type-assignable class="com.example.client.SvgFix" />
  <when-property-is name="user.agent" value="ie9" />
</replace-with>

顺便说一句,请注意链接器<script>不支持 gwt.xml 文件xsiframe,我鼓励您继续使用它(它具有所有其他链接器的所有优点,并且没有它们的缺点,而且它增加了 Super Dev模式、灵活性/可配置性等)

于 2013-07-25T09:31:53.800 回答
3

您可以尝试条件注释

<!--[if IE 9]>
<script src="ie9svgfix.js"></script>
<![endif]-->
于 2013-07-25T09:20:08.760 回答