GWT如何为每个浏览器提供正确的Javascript代码,例如执行i18n和浏览器兼容性?

时间:2015-01-24 13:27:46

标签: java javascript gwt cross-browser

我是GWT的新手,在我跳入Vaadin世界后,我开始看一下它。

从维基阅读:https://code.google.com/p/google-web-toolkit-doc-1-5/wiki/FAQ_DeferredBindingDefinition

  

当GWT编译器编译Java应用程序时,它会确定   所有不同的特质"特质"它必须支持并生成   一个单独的,紧密简化的应用程序版本   具体配置。例如,它生成不同的版本   Firefox的应用程序文件比Opera的。

     

...

     

延迟绑定的另一个典型例子是国际化:   GWT编译器使用延迟绑定来完全生成   每种语言的应用程序的单独版本。为什么要这样   说英语的人必须下载你申请的法文文本吗?

GWT使用延迟绑定并将Java代码编译为针对目标浏览器优化的不同Javascripts,并且对于每个Javacripts,GWT还可以为每种语言生成JS的子集以允许i18n。

现在,从延迟绑定的解释来看,这一切都是在编译时完成的,但实际上在运行时,当有来自服务器的传入请求时,应用程序如何使用GWT编写知道浏览器是否是Chrome,Firefox还是Opera?它是否解析请求的User-Agent标头? (我会怀疑它,因为它不太可靠)它是否使用了一种Javascript' bootstrap'客户端代码,它可以在运行时快速确定用户的浏览器,然后向服务器发出异步请求,为那个浏览器下载适当的优化的语言特定Javascript代码?

魔法怎么会发生?

感谢您的关注!

1 个答案:

答案 0 :(得分:2)

  

它是否使用了一种Javascript' bootstrap'客户端代码   在运行时快速确定用户的浏览器然后制作   一个异步请求到服务器下载适当的优化,   具有该语言环境的浏览器的语言特定Javascript代码?

确切地说会发生什么。您从html页面加载了一个非常小的bootstrap javascript文件( yourmodulename .nocache.js)(使用普通的<script>标记)。此脚本使用navigator.userAgent确定浏览器类型,并从那里动态加载与浏览器相关的&#39; part(它应该被缓存,因为它可能很大)。

在编译时,GWT确定需要多少排列(外部因素的组合,例如浏览器模型,资源语言等)。然后,对于每个组合,生成结果javascript模块 当您部署所有这些文件时,每个客户端只会下载访问您网站时与他相关的文件。