質問

背景

Webアプリケーション内で引数を連結したリンクの代わりにPOSTフォーム送信を使用しているため、入力を制御できます。

残念ながら、これは、コントロールクリックやミドルクリックなど、ユーザーが知っているクイックショートカットを使用してリンクを新しいウィンドウで開くことができないことを意味します。

問題

W3C DOMマウスイベント仕様

 $("span#clickspan").click( function(event) {

   buttonpress = event.button;
   ctrlpress = event.ctrlKey;

    $("#clickresult").empty();
    $("#clickresult").append("<p>Click!</p>");
    $("#clickresult").append("<p>Button # " + buttonpress + " pressed!</p>");
    if (ctrlpress) {
        $("#clickresult").append("<p>Control-click!</p>");
    }

    //form submission code would go here

    event.preventDefault();

    }
 );

この方法でコントロールクリックをキャプチャでき(Firefox 3およびIE7でテスト済み)、マウスボタン#0からの左クリックを正しく(?)報告しますが、何らかの理由でこのコードはまだ中央をキャプチャしませんスパン上でクリックし、右クリックしてもコンテキストメニューがポップアップします。少なくとも、中クリックをキャプチャしたいと思います。

誰かがそこで助けてもらえますか?

「コントロール」とは意味

GETサブミット/連結された引数を持つリンクの問題は、誰でもアドレスバーを編集して、何でも入力できることです。サーバー側の認証と検証についてはすでに心配しています。それが、POSTを使用したい理由ではありません。

ユーザーに意味のある情報のみを表示する必要があります。内部データベースIDはそうではありません。ユーザーに意味のある方法でのみアプリケーションを操作させます。アドレスバーを任意に編集することは、それらの1つではありません。

人々は常にタイプミスをします。ただし、システムの観点から見ると、アドレスバーのタイプミスとアプリケーションロジックの欠陥に違いはありません。どちらが発生したかを判断する責任をユーザーに押し付けたくはありません。

役に立ちましたか?

解決

簡単な回答ですか?できません。

長答? Javascriptマウスイベント。それでもできません。

これは質問を請います:POSTを使用する必要がありますか 、または単に したいですか?必要な唯一の理由は、クエリ文字列の長さです。したいことについては、「ユーザー入力の制御」に言及しています。それは正確にどういう意味ですか?

入力検証のためにブラウザに依存することは決してありません。利便性のためにそこで行うことができますが、サーバーは常に入力を検証する必要があります。

または審美的な理由(つまり、より短い、「より良い」URL)?

ハイパーリンクであるホイールを再発明しています。それは非生産的であり、実際のハイパーリンクと同じブラウザのサポートと互換性が得られないので、そうするのにかなり正当な理由があることを確認しようとしています。さらに、ユーザーは、期待していたものが機能しないので、単にユーザーを困らせる可能性があります。良くない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top