簡體   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