ブラウザがWicketでjavascriptまたはajaxをサポートしているかどうかを検出しますか?
Wicketには多くのAjaxフォールバックコンポーネントが組み込まれており、ajaxが利用できない場合やJavascriptが無効になっている場合に通常のリクエストに低下します。 良い例は、AjaxFallbackButton、AjaxFallbackLinkなどです。
Note
ただし、フォールバック動作を実装しなかったコンポーネントがいくつかあります。たとえば、AjaxLazyLoadPanelは、JavaScriptが無効になっている場合、Wicketのデフォルト画像を永久に表示し続けます。
溶液
実際、Wicketには、ブラウザがJavaScriptをサポートしているかどうかを検出するための組み込みメカニズムがあります。 ただし、Wicketは理由によりデフォルトでこの機能をオフにします。
1. ブラウザの情報を収集します
Wicketアプリケーションで、init()
をsetGatherExtendedBrowserInfo(true)でオーバーライドすると、ブラウザから追加情報を収集するようにWicketに指示します。
protected void init() { getRequestCycleSettings().setGatherExtendedBrowserInfo(true); }
2. JavaScriptを検出する
これで、ブラウザが次のようなJavaScriptをサポートしているかどうかを検出できます。
WebClientInfo clientInfo = (WebClientInfo)WebRequestCycle.get().getClientInfo(); if(clientInfo.getProperties().isJavaEnabled()){ //Javascript is enable }else{ //Javascript is enable }
説明
ユーザーがページをリクエストすると、Wicketはクライアントブラウザーで簡単なJavaScriptリダイレクトテストを実行して、ブラウザーのJavaScriptがサポートされているかどうかをテストし、ユーザーのセッションに保存します。 リダイレクトテストの実行後、Wicketは要求された元のページにリダイレクトします。 プロセス全体は非常に高速ですが、空白のページが一瞬表示されます。 これが、Wicketがデフォルトでオフにする理由です。 黒いページのフラッシュは本当に迷惑です。この種のフラッシュページを見ると、このサイトがフィッシングサイトであると思われるかもしれません:)、クライアントもそうです。
Wicketリダイレクトテストページは一般的であり、すべての場合に適していますが、少なくとも私にとっては、空白ページのフラッシュは実際には受け入れられません。