簡體   English   中英

基於用戶代理在服務器上檢測GWT排列

[英]Detecting GWT permutation on server based on user agent

我目前正在為Web應用程序添加HTML5脫機支持,並且大多數情況下都遵循mgwt的相同方法:

  1. 在計算時生成每個排列的清單文件
  2. 基於瀏覽器的用戶代理,使用servlet來服務清單文件。

我的問題涉及步驟2:在我的servlet中,我想檢測為某個請求提供服務的排列。 我現在這樣做的方式是:

  • 從請求中獲取用戶代理字符串
  • 將此映射(使用簡單的字符串操作(例如, userAgent.contains("safari") )到“代理ID”,我可以使用映射文件將其映射到置換強名稱。換句話說,映射Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.1)ie6 ,我可以將其映射(使用生成的映射文件,請參見下面的示例)到15B454D690F2CCAD57F1DD809429BF42

     <permutation name="15B454D690F2CCAD57F1DD809429BF42"> <user.agent>ie6</user.agent> </permutation> 

我面臨的問題:我想使用將用戶代理字符串鏈接到排列的方法與GWT使用的方法相同(即將Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.1)映射到ie6 )。 這樣,無論何時我的GWT更新為其他排列/瀏覽器版本,我都不必修復代碼。 換句話說,我不喜歡當前的解決方案,即在排列映射中將Servlet中的完整用戶代理字符串與用戶代理“ id”(在我的示例中為“ ie6”)天真地匹配。 我想到的解決方案是:

  • 頁面加載后,檢測已加載的排列,並將其作為參數傳遞給Servlet。 然后,在獲取了該排列的清單后,使用javascript將其插入為html標簽的屬性。 但是,動態插入它似乎無法正常工作。 (請參閱動態觸發HTML5緩存清單文件? )(同一篇文章介紹了使用iframe動態執行此操作的一種解決方法,但我更喜歡一種更簡潔的解決方案)
  • 在我的servlet中,以某種方式使用客戶端將完整的用戶代理字符串映射到一個排列。 我更喜歡這種解決方案,但是還沒有找到實現此目標的方法... GWT使用JavaScript實現了這一目標(請參閱UserAgentPropertyGenerator )。 我可以在servlet中執行此操作,但是此javascript方法不僅使用用戶代理,而且還使用dom文檔...是否有其他我在忽略的解決方案? 當然,在創建HTML5清單文件時,其他人肯定也有此問題...

你可以采取的優勢HTML5Manifest提供解決方案mgwt 它們具有一個鏈接器 ,該鏈接器生成一個文件,該文件可以由它們提供的servlet讀取,並根據用戶代理標頭返回適當的文件列表以供瀏覽器緩存。

如果您想自己做,則可以基於http用戶代理標頭以及gwt編譯器生成的xsiframe compilation-mappings.txt文件(如果使用的是xsiframe每個瀏覽器最合適的排列xsiframe鏈接器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM