我有一个专门针对IE9的JavaScript修复程序,并希望将其加载到我的项目中仅用于该浏览器。我想我可以在我的.gwt.xml中做这样的事情:
<script src="ie9svgfix.js">
<when-property-is name="user.agent" value="ie9"/>
</script>
但不幸的是,这不起作用。有没有人知道在GWT中做到这一点的干净方法?
谢谢,
乔恩
答案 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
,我鼓励您继续使用它(它具有所有其他功能的所有优点)连接器,没有任何缺点,加上它增加了超级开发模式,灵活性/可配置性等。)