繁体   English   中英

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

[英]How does GWT provide the correct Javascript code to every browser e.g. to carry out i18n and browser compatibility?

我对GWT非常陌生,在进入Vaadin世界后,我开始对其进行研究。

从Wiki上阅读以下内容: https : //code.google.com/p/google-web-toolkit-doc-1-5/wiki/FAQ_DeferredBindingDefinition

当GWT编译器编译Java应用程序时,它将确定它必须支持的所有不同的“特性”,并为该特定配置生成一个单独的,精简的应用程序版本。 例如,它为Firefox生成的应用程序文件版本与Opera生成的版本不同。

...

Deferred Binding的另一个经典示例是国际化:GWT编译器使用Deferred Binding为每种语言生成应用程序的完全独立的版本。 为什么讲英语的人必须下载您的应用程序的法语文本?

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

现在,关于延迟绑定的说明都是在编译时完成的,但是实际上是在运行时,当服务器有传入请求时,用GWT编写的应用程序如何知道浏览器是Chrome,Firefox还是Opera? 它是否解析请求的User-Agent标头? (我会对此表示怀疑,因为它不太可靠。)它是否使用了一种Javascript“引导”客户端代码,该代码可以在运行时快速确定用户的浏览器,然后向服务器发出异步请求以下载适当的优化,特定语言Javascript代码与该区域设置浏览器?

魔术是怎么发生的?

感谢您的关注!

它是否使用某种Javascript“引导”客户端代码,该代码在运行时快速确定用户的浏览器,然后向服务器发出异步请求,以使用该语言环境为该浏览器下载适当的优化的,特定于语言的Javascript代码?

就是这样。 您可以从html页面(使用常规<script>标记)加载一个很小的引导javascript文件( yourmodulename .nocache.js)。 该脚本使用navigator.userAgent确定浏览器类型,并从那里动态加载“与浏览器相关的”部分(由于可能很大,因此应该缓存该部分)。

在编译时,GWT决定需要多少排列(外部因素的组合,例如浏览器模型,资源语言等)。 然后为每个组合生成一个生成的javascript模块。
尽管您将部署所有这些文件,但是每个客户端在他访问您的站点时将只下载与他相关的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM