ユーザーがあなたのウェブサイトにいて、新しいタブで(あなたのウェブサイトへの)別のリンクを開いた場合、これを通常のリンクをクリックするだけのユーザーと区別することは可能ですか?これは、サーバー上のJavaScriptで何でもかまいません。
答えはできないと思いますが、もう一度確認したいと思います。
あなたはこのようにそれを行うことができます:
if (history.length == 1) { // Um, needs to be 0 for IE, 1 for Firefox
// This is a new window or a new tab.
}
history.length
を1
にする方法は他にもあるかもしれませんが、それが何であるかはわかりません。
JavaScriptのhistory.lengthに加えて、ウィンドウの名前を読み書きできます。
したがって、onloadという名前があるかどうかを確認すると...最初のロードではshouldは空白になります...次に「」に設定するとfoo "...そのウィンドウでの後続のロードごとに... window.nameプロパティは" foo "を返します...新しいタブ/ウィンドウでリンクを開かない限り...その新しいウィンドウには名前を設定しないでください。
(もちろん、window.open(url、name、features);を介してポップアップを開く場合を除きます。これにより、名前を事前に設定できます)
<script>
if(window.name == ''){
//first load (or Nth load in a new Tab/Window)
if(!SOME_VALUE_SET_FOR_2ND_TO_NTH_LOADS){
//set name so we can catch new Tab/Window
window.name = 'myWinName';
} else {
//we have a new Tab/Window (or something funky)
alert('What?! One window not cool enough for ya?\n' +
'Calling the InterWeb Police!');
}
} else if(window.name == 'myWinName'){
//2nd-Nth load
document.title = 'All is well... we think';
}
</script>
警告:
これは、認証されたユーザーが複数のタブを開くことを禁止するためにASP.NETMVCで使用するものです。
<script language="javascript" type="text/javascript">
@if(Request.IsAuthenticated)
{
<text>
if (window.name != 'singleWindow') {
window.location.href = "Content/ErrorPages/SingleTab.htm";
}
</text>
}
else
{
<text>
window.name = "singleWindow";
</text>
}
</script>
基本的に、これはユーザーがログインページに初めてアクセスしたときにウィンドウ名を設定します。ログイン後、後続のページの読み込みごとにウィンドウ名がテストされます。
2つの問題:
JavaScriptのwindow.openerプロパティは、新しいウィンドウを開いたウィンドウを指します。ただし、新しいウィンドウと新しいタブは区別されません。タブは公式のW3C仕様の一部ではないため、タブを直接サポートすることはできません。
簡単な答えは、いいえです。長い答えは、ページからサーバー側のメソッドへのajaxy呼び出しを実行している場合、ウィンドウのttrackを開いたままにする可能性があるということです(短い時間枠内で呼び出されます)。それはずさんで信頼性の低い混乱になるでしょう、そしてあなたはそのことに関して新しいウィンドウとタブを区別することができませんでした。
私は本当にそうは思いません。私の知る限り、最も近いのは、キー押下イベントとマウスクリックイベントを監視して、新しいタブでリンクを開くための一般的な方法にアクションを一致させようとすることです。 (つまり、クリックしたとき、または中クリックしたときにCommandを押している場合は、おそらく新しいタブです)。ただし、これらのバインディングはいずれも変更される可能性があるため、これは信頼できません。
これはクライアントの動作なので、ブラウザの履歴を確認するなど、JavaScriptで何かできると思いますが、新しいタブと新しいウィンドウの間ではあいまいです。
それに加えて、すべてのブラウザにタブがあるわけではなく、すべてのブラウザがタブとは同じ意味を持つわけではありません(プロセスが異なる場合もあれば、そうでない場合もあります)。
しかし、なぜあなたはそれをチェックしたいのですか?アプリケーションが新しいタブで実行されているかどうかは本当に重要ですか?そうは思いません...