2

所以我正在开发一个测验网络应用程序。我想添加一个测验管理员可以设置的设置,以便用户在进行测验时只能打开 1 个窗口/选项卡。

这样做的原因是为了让他们在测验窗口/标签打开时不能像谷歌那样去谷歌和谷歌答案。当然,他们总是可以打开不同的浏览器并这样做,但仍然认为让他们启用这将是一个不错的功能。

现在我不知道这是否会违反安全沙箱(因此根本不可用),但因为我只想检测另一个选项卡或窗口是否打开,而不是获取有关选项卡/窗口的实际信息,我希望这在某种程度上可以使用javascript。

4

3 回答 3

9

您不能,但可能的解决方法是使用新的HTML5 fullscreen API。您可以使用一个setInterval函数定期对其进行测试,document.fullScreen == true以确保用户没有关闭全屏。

这仅在现代浏览器中有效,如果用户知道他在 JS 控制台周围的方式,那么解决它是微不足道的,但它似乎确实符合您的要求。

请注意,当前所有全屏 API 实现都是以供应商为前缀的

于 2012-07-09T23:23:37.250 回答
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!');
  });
});

可悲的是,它也会给你很多误报。

于 2012-07-09T23:29:03.990 回答
3

不能也不应该做。

于 2012-07-09T23:15:32.623 回答