私はいくつかのアプリケーション ロジック クライアント側 (javascipt) を委任しています。JavaScriptが無効になっている場合にのみサーバー側に切り替えるにはどうすればよいですか。
例えば
if(javascript.isdisabled)
{
//execute server code
}
私はいくつかのアプリケーション ロジック クライアント側 (javascipt) を委任しています。JavaScriptが無効になっている場合にのみサーバー側に切り替えるにはどうすればよいですか。
例えば
if(javascript.isdisabled)
{
//execute server code
}
あなたはそれを逆にします。サーバー側のコードで動作する HTML を記述し、サーバー側のコードをトリガーする HTTP 要求を停止する JavaScript をその上に重ねます。
詳細は何をしたいかによって異なりますが、通常はイベント リスナーEvent.preventDefault()
をバインドしたメソッドを呼び出す必要があります。
たとえば、フォームが与えられた場合:
function calc(evt) {
var form = this;
alert(+this.elements.first.value + +this.elements.second.value);
evt.preventDefault()
}
var form = document.querySelector('form');
form.addEventListener('submit', calc);
サーバーコードが最初に実行され、次にクライアント側に送信されます。また、JS がオンになっているかどうかをサーバー側で判断する良い方法はありません。
純粋に:いいえ。サーバーがそのリクエストの処理を完了した時点まで、JS が有効になっているかどうかはわかりません。
解決策は次のとおりです。
1) 手動で行う (非推奨)
これがユーザーの最初のページ ビューで発生しない限り、最初のページ ビューで JS が有効かどうかを判断し、サーバーへの今後のすべてのリクエストにその情報を手動で伝えることができます。これを実現する 1 つの方法は、すべてのリンクにサーバーにロジックを実行するように指示するクエリ変数を持たせることですが、ページの読み込み後に JS を介してその変数を削除します (これは明らかに JS がある場合にのみ発生します)。
したがって、ページ内のリンクは次のようhttps://blah.com/my-page?serverexecute=1
になります。ページがJSをロードすると(有効になっている場合)、変数を削除できるため、https://blah.com/my-page
. 次に、サーバーは、クエリ変数serverexecute
が存在し、に設定されている場合にのみロジックを実行します1
。
しかし、これは非常に標準的ではなく、率直に言って奇妙です。これを行うより通常の方法は次のとおりです。
2) 考え方を逆転させる (推奨)
別の答えで述べたように:プログレッシブエンハンスメント。これが標準です。他のスクリプトを必要としない (つまり、サーバー側で実行する必要があることを実行する) ことを期待してページを提供し、その上でのみ JS を拡張として使用します。
3) 非 JS に対応しないでください (個人的にも推奨されます)。
JS の可用性は非常に高い割合です。これは標準と見なされており、これがないと実際に機能しないサイトの数に驚かれることでしょう。
「静かに中断させてください」と言っているのではなく、上部 (または関連する場所) に、サイトまたはサイトの一部が JS なしでは正しく機能しない可能性があるというメッセージを表示することに注意してください (これは次の方法で実行できます)。noscript
タグは非常に簡単です)。
この顕著な例は、他ならぬFacebookです。JSを無効にしてFacebookにアクセスしようとしました。私は何にもログインしていなかったので、登録ページにたどり着き、フォームの上に次のように記されていました。
「ブラウザで JavaScript が無効になっています。ブラウザで JavaScript を有効にするか、JavaScript 対応のブラウザにアップグレードして Facebook に登録してください。」
彼らは、フォームが表示されないようにする努力さえしませんでした... 本質的には、「ちなみに、それは機能しません」と私に言った.
非 JS が絶対に必要であることを意味する非常に具体的な要件がない限り (通常の一般的な「アクセシブルにしよう」という概念を超えて)、現在のところ、非 JS ユーザーに対応するために何らかの努力を払う理由はまったくないと私は信じています。noscript
あなたが彼らに対応していないことを彼らに知らせます。