如果用户在您的网站上并在新标签页中打开另一个链接(也是您的网站),是否可以将其与用户区别开来?这可以是javascript,在服务器上,无论如何.
我猜答案是你不能这样做,但我想仔细检查一下.
Ric*_*dle 33
你可以像这样做:
if (history.length == 1) { // Um, needs to be 0 for IE, 1 for Firefox
// This is a new window or a new tab.
}
Run Code Online (Sandbox Code Playgroud)
可能还有其他的途径history.length是1,但我不知道他们可能是什么.
scu*_*ffe 11
除了JavaScript中的history.length,您还可以读/写窗口的名称.
因此,如果你检查它是否有一个名称onload ...它应该在第一次加载时为空...如果你然后将它设置为"foo"...在该窗口中的每个后续加载...窗口. 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>
Run Code Online (Sandbox Code Playgroud)
注意事项:
这是我在ASP.NET MVC中使用的禁止经过身份验证的用户打开多个选项卡的内容:
<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>
Run Code Online (Sandbox Code Playgroud)
基本上,这会在用户访问登录页面时首次设置窗口名称.登录后,对于每个后续页面加载,将测试窗口名称.
两个问题:
JavaScript 中的 window.opener 属性将指向打开新窗口的窗口。但是,它不区分新窗口和新选项卡。标签不是官方 W3C 规范的一部分,因此没有对它们的直接支持。
| 归档时间: |
|
| 查看次数: |
28393 次 |
| 最近记录: |