所以我正在开发一个测验网络应用程序。我想添加一个测验管理员可以设置的设置,以便用户在进行测验时只能打开 1 个窗口/选项卡。
这样做的原因是为了让他们在测验窗口/标签打开时不能像谷歌那样去谷歌和谷歌答案。当然,他们总是可以打开不同的浏览器并这样做,但仍然认为让他们启用这将是一个不错的功能。
现在我不知道这是否会违反安全沙箱(因此根本不可用),但因为我只想检测另一个选项卡或窗口是否打开,而不是获取有关选项卡/窗口的实际信息,我希望这在某种程度上可以使用javascript。
所以我正在开发一个测验网络应用程序。我想添加一个测验管理员可以设置的设置,以便用户在进行测验时只能打开 1 个窗口/选项卡。
这样做的原因是为了让他们在测验窗口/标签打开时不能像谷歌那样去谷歌和谷歌答案。当然,他们总是可以打开不同的浏览器并这样做,但仍然认为让他们启用这将是一个不错的功能。
现在我不知道这是否会违反安全沙箱(因此根本不可用),但因为我只想检测另一个选项卡或窗口是否打开,而不是获取有关选项卡/窗口的实际信息,我希望这在某种程度上可以使用javascript。
您不能,但可能的解决方法是使用新的HTML5 fullscreen API。您可以使用一个setInterval
函数定期对其进行测试,document.fullScreen == true
以确保用户没有关闭全屏。
这仅在现代浏览器中有效,如果用户知道他在 JS 控制台周围的方式,那么解决它是微不足道的,但它似乎确实符合您的要求。
请注意,当前所有全屏 API 实现都是以供应商为前缀的。
似乎有一种可行的替代方法来替代以下行描述的方法:使用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!');
});
});
可悲的是,它也会给你很多误报。
不能也不应该做。