GWT - 加载特定于浏览器的JavaScript

时间:2013-07-25 09:04:49

标签: gwt

我有一个专门针对IE9的JavaScript修复程序,并希望将其加载到我的项目中仅用于该浏览器。我想我可以在我的.gwt.xml中做这样的事情:

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

但不幸的是,这不起作用。有没有人知道在GWT中做到这一点的干净方法?

谢谢,

乔恩

2 个答案:

答案 0 :(得分:3)

您可以尝试conditional comments

<!--[if IE 9]>
<script src="ie9svgfix.js"></script>
<![endif]-->

答案 1 :(得分:3)

GWT中最干净的方式是使用延迟绑定并在IE9排列中使用ScriptInjector注入脚本;或者让主页加载脚本,在这种情况下,您可以使用条件注释(as suggested by Stano)。

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

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>

BTW,请注意<script>链接器不支持gwt.xml文件中的xsiframe,我鼓励您继续使用它(它具有所有其他功能的所有优点)连接器,没有任何缺点,加上它增加了超级开发模式,灵活性/可配置性等。)