我们如何检测用户何时打开新窗口。用户已经过身份验证,我们会大量使用会话。
我们试图避免 Ctrl + N javascript钩子,但也许这是一个选项。
我假设请求是完全相同的URL ... Ctrl + N ?
答案 0 :(得分:10)
我们试图避免使用ctrl-n javascript hooks
算了。虽然理论上你可以尝试使用Control键修饰符捕获'n'的按键事件,但是有很多其他方法可以打开一个可能更有可能被使用的新窗口或标签,你将无法使用去抓。文件 - >新窗口/标签,中间点击或移动点击链接,中间点击后退/前进按钮,右键单击 - 打开新窗口,在新标签页中打开书签,双击浏览器图标...
用户已经过身份验证,我们会大量使用会话。
这本身不应该是一个问题。我想你的意思是你的应用程序在会话中转储了它不应该有的各种特定于页面的数据,现在当你打开多个窗口时,你会发现应用程序中断了吗?好吧,怜悯和快乐的重写。
与此同时,您可以做的就是告诉用户“请不要尝试在同一个应用程序上打开两个浏览器窗口”。有一些方法可以让您在一个页面上发现JavaScript同时注意到JavaScript在同一个域中的另一个页面上运行,通常涉及使用document.cookie作为页面间通信管道。但那也有点脆弱。
答案 1 :(得分:3)
如果打开一个新窗口会导致应用程序出现问题,那么您应该修复应用程序代码来处理它,而不是尝试应用不一致且不可靠的客户端“绷带”。这是我的意见。
答案 2 :(得分:2)
为什么呢?
无论如何你无法察觉它。用户不仅可以使用 Ctrl + N 打开新窗口,还可以使用文件 - >新窗口打开新窗口。
答案 3 :(得分:1)
您可以在会话中添加一个窗口计数,并在window.onload
上递增,并在window.onunload
上递减。
想象一下,如果你使用它,我会啧啧啧啧地在我的牙齿里吸气,然后“比你更好,guvna”。
答案 4 :(得分:1)
我解决此问题的方法是,当用户进行身份验证时,在有效登录时设置窗口名称。
<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,则隐藏/删除页面的主要内容,并显示一条消息,指出他们正在执行不受支持的操作。
当你的登录页面没有绑定到母版页时,这种方法就可以了。
如果您没有母版页,那么我建议您检查所有页面。
答案 5 :(得分:0)
是和否,
如果控件具有焦点,您将始终看到它,否则事件将直接发送到浏览器,页面上的代码永远不会听到它。
根据我的经验,您无法劫持浏览器的快捷方式,您的里程可能会有所不同。你可能知道它发生了,但浏览器会做它的事情(显而易见的原因)
在大多数浏览器中, Ctrl - N 的效果是在与旧网页相同的URL处打开一个新窗口,并将其与相同的sessionID关联。
最好的办法是尽可能修改后端代码并允许这样的事情。打破浏览器的功能永远不是一件好事。