Wicketは、ajaxが利用できない場合やJavascriptが無効の場合、通常のリクエストに劣化する多くのAjaxフォールバックコンポーネントを組み込みます。 AjaxFallbackButton、AjaxFallbackLinkなどの良い例があります。
解決策
実際には、WicketにはブラウザがJavaScriptをサポートしているかどうかを検出する組み込みメカニズムがあります。しかし、Wicketは、デフォルトでこの機能を無効にしています。
1.ブラウザの情報を収集する
Wicketアプリケーションでは、
setGatherExtendedBrowserInfo(true)
を使って `init()`をオーバーライドします.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のリダイレクトテストページは一般的で、すべての場合に適していますが、空白のページのフラッシュは、少なくとも私のためには本当に受け入れられません。