检测浏览器是否有超过1个选项卡/窗口打开

时间:2012-07-09 23:11:45

标签: javascript browser tabs sandbox

所以我正在开发一个测验Web应用程序。我想添加一个测验管理员可以设置的设置,以便用户在测验时只能打开1个窗口/标签。

这样做的原因是为了让它们在测验窗口/标签打开时不能像谷歌一样转动并回答答案。当然,他们总是可以打开不同的浏览器并按照这种方式进行操作,但仍然认为让它们启用是一个很好的功能。

现在我不知道这是否属于安全沙箱违规(因此根本不可用)但是因为我只想检测是否有其他标签或窗口打开而没有获得有关标签/窗口的实际信息我我希望这可以使用javascript。

3 个答案:

答案 0 :(得分:9)

您不能,但可能的解决方法是使用新的HTML5 fullscreen API。您可以使用setInterval函数定期测试document.fullScreen == true以确保用户没有切换到全屏。

这仅适用于现代浏览器,如果用户知道JS控制台的方式,那么解决它是微不足道的,但它似乎符合您的要求。

请注意,目前所有全屏API实施都是vendor-prefixed

答案 1 :(得分:6)

似乎有一种可行的替代方法可以替代下面描述的方法:使用Page Visibility API,目前所有现代浏览器都支持。这看起来比听blur更可靠。有一种可行的方法:

// on quiz start
document.addEventListener('visibilitychange', function() {
  if (document.hidden) {
    console.log('Y U hide?');
  }
});

问题是只有当页面从可见变为隐藏时才会触发visibilitychange事件(反之亦然)。它仍然允许用户打开两个浏览器实例 - 一个带有测验页面,一个带有任何喜欢的搜索引擎,例如。


虽然您无法检测到打开的标签数量,但您可以尝试使用此技巧检查用户何时离开测验页面:

$(function(){
  $(window).blur(function() {
    console.log('I see what you did here!');
  });
});
可悲的是,它也会给你很多误报。

答案 2 :(得分:3)

不能也不应该这样做。