ユーザーが新しいウィンドウを開いたときをどのように検出できますか。ユーザーはすでに認証されており、セッションを多用しています。
Ctrl+ javascript フックを回避しようとしてNいましたが、おそらくそれはオプションです。
リクエストはまったく同じ URL であると想定しています... Ctrl+ N?
ユーザーが新しいウィンドウを開いたときをどのように検出できますか。ユーザーはすでに認証されており、セッションを多用しています。
Ctrl+ javascript フックを回避しようとしてNいましたが、おそらくそれはオプションです。
リクエストはまったく同じ URL であると想定しています... Ctrl+ N?
ctrl-n JavaScript フックを回避しようとしていました
忘れてください。理論的には、Control キー修飾子を使用して「n」のキー押下イベントをキャッチしようとすることもできますが、使用される可能性が高い新しいウィンドウまたはタブを開く方法は他にもたくさんありますが、それはできません。捕まえる。[ファイル] -> [新しいウィンドウ/タブ]、リンクを中クリックまたは Shift キーを押しながらクリック、戻る/進むボタンを中クリック、新しいウィンドウで右クリックして開く、ブックマークを新しいタブで開く、ブラウザ アイコンをダブルクリック...
ユーザーはすでに認証されており、セッションを多用しています。
それ自体は問題ではないはずです。あなたの言いたいことは、あなたのアプリケーションがセッション内のあらゆる種類のページ固有のデータをダンプしていて、複数のウィンドウを開いているとアプリケーションが壊れていることを意味していると思いますか? さて、同情と幸せな書き直し。
それまでの間、あなたにできることは、ユーザーに「同じアプリケーションで 2 つのブラウザー ウィンドウを開こうとしないでください」と伝えることだけです。あるページで JavaScript が同じドメイン内の別のページで同時に実行されていることを認識させるには、一般的に document.cookie をページ間の通信経路として使用する方法が考えられます。しかし、それは少し壊れやすいものでもあります。
新しいウィンドウを開くとアプリケーションで問題が発生する場合は、一貫性がなく信頼性の低いクライアント側の「包帯」を適用しようとするのではなく、それを処理するようにアプリケーション コードを修正する必要があります。それが私の意見です。
なんで?
とにかく、あなたはそれを検出することはできません。ユーザーはCtrl+だけでNなく、File->New Windowでも新しいウィンドウを開くことができます。
この問題を解決するために私が行ったことは、ユーザーが有効なログイン時にウィンドウ名を設定することを認証するときです。
<script>
window.name = 'oneWindow';
</script>
次に、マスターページでjavascriptチェックを実行します。
<script>
if (window.history.length == 0 || window.name != 'oneWindow')
//history length to see if it's a new tab or opened in a new window 0 for IE, 1 for FF
//window name to see if it's a CTRL + N new window
</script>
チェックがtrueの場合、ページのメインコンテンツを非表示/削除し、サポートされていないことを行っていることを示すメッセージを表示します。
これは、ログインページがマスターページに関連付けられていない場合に機能します。
マスターページがない場合は、すべてのページにチェックを入れることをお勧めします。
セッションにウィンドウ カウントを入れて、それを 1 ずつ増やしたり 1 ずつwindow.onload
減らしたりすることができますwindow.onunload
。
でも、もしあなたがそれを使えば、私が歯を食いしばり、歯から空気を吸い込み、「私よりもあなたの方がいい」と思っていると想像してみてください。
はいといいえ、
コントロールにフォーカスがある場合は常に表示されます。そうでない場合、イベントはブラウザーに直接送信され、ページ上のコードはそれを認識しません。
私の経験では、ブラウザのショートカットをハイジャックすることはできません。マイレージはさまざまです。あなたはそれが起こったことを知っている可能性がありますが、ブラウザはそのことをします(明らかな理由で)
ほとんどのブラウザーでは、Ctrl-の効果はN、古いウィンドウと同じ URL で新しいウィンドウを開き、同じセッション ID に関連付けることです。
最善の策は、可能であればバックエンド コードを変更し、そのようなことを許可することです。ブラウザーの機能を壊すことは決して良いことではありません。