javascript-读取一个单独的选项卡,检查它是否';它开着
我正在寻找一种方法,在打开请求的选项卡之前,以某种方式读取/检查另一个浏览器选项卡是否已打开 例如: 这是我的流量交换网站,他们只是打开mysite.com/surf.php,让它在一个框架中查看用户提交的网站。他们只需离开跑步场就可以获得积分 现在让我们假设用户A的冲浪页面A运行良好,然后打开冲浪页面B,然后他有2个mysite.com/SURF.php运行,并获得其他人将获得的两倍积分 我希望发生的是: 用户A的冲浪页面A运行正常,然后尝试打开冲浪页面B,该页面将检查另一个mysite.com/SURF.php是否已打开,以及是否将第二个冲浪页面的请求重定向到另一个mysite.com/SURF-error.php 因此,他们在任何给定时间只能运行1个mysite.com/surf.phpjavascript-读取一个单独的选项卡,检查它是否';它开着,javascript,jquery,Javascript,Jquery,我正在寻找一种方法,在打开请求的选项卡之前,以某种方式读取/检查另一个浏览器选项卡是否已打开 例如: 这是我的流量交换网站,他们只是打开mysite.com/surf.php,让它在一个框架中查看用户提交的网站。他们只需离开跑步场就可以获得积分 现在让我们假设用户A的冲浪页面A运行良好,然后打开冲浪页面B,然后他有2个mysite.com/SURF.php运行,并获得其他人将获得的两倍积分 我希望发生的是: 用户A的冲浪页面A运行正常,然后尝试打开冲浪页面B,该页面将检查另一个mysite.co
我该怎么做呢?当您开始跟踪某人的时间时,请设置一个会话变量
session.trackingtime = true
再次检查以开始跟踪时间时,请确保该值设置为
false
。停止跟踪时间时,将变量设置为false
同一浏览器中同一域上的浏览器窗口可以通过以下方式交换一些信息:
除了这些选项之外,如果您想在客户端强制执行它,您可能需要一个能够监视所有打开的浏览器窗口的浏览器插件(我认为这是不实际的)。您无法通过网页中的纯javascript监视用户打开的多个窗口。我今天也做了类似的事情。只要更新
else if
部分,就可以在您的案例中执行重定向
// helper function to set cookies
function setCookie(cname, cvalue, seconds) {
var d = new Date();
d.setTime(d.getTime() + (seconds * 1000));
var expires = "expires="+ d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
// helper function to get a cookie
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
// Do not allow multiple call center tabs
if (~window.location.hash.indexOf('#admin/callcenter')) {
$(window).on('beforeunload onbeforeunload', function(){
document.cookie = 'ic_window_id=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
});
function validateCallCenterTab() {
var win_id_cookie_duration = 10; // in seconds
if (!window.name) {
window.name = Math.random().toString();
}
if (!getCookie('ic_window_id') || window.name === getCookie('ic_window_id')) {
// This means they are using just one tab. Set/clobber the cookie to prolong the tab's validity.
setCookie('ic_window_id', window.name, win_id_cookie_duration);
} else if (getCookie('ic_window_id') !== window.name) {
// this means another browser tab is open, alert them to close the tabs until there is only one remaining
var message = 'You cannot have this website open in multiple tabs. ' +
'Please close them until there is only one remaining. Thanks!';
$('html').html(message);
clearInterval(callCenterInterval);
throw 'Multiple call center tabs error. Program terminating.';
}
}
callCenterInterval = setInterval(validateCallCenterTab, 3000);
}
//用于设置Cookie的帮助函数
函数setCookie(cname、cvalue、seconds){
var d=新日期();
d、 设置时间(d.getTime()+(秒*1000));
var expires=“expires=“+d.toutString();
document.cookie=cname+“=”+cvalue+”;“+expires+”;path=/”;
}
//获取cookie的助手函数
函数getCookie(cname){
变量名称=cname+“=”;
var decodedCookie=decodeURIComponent(document.cookie);
var ca=decodedCookie.split(“;”);
对于(变量i=0;i
简单地说“一个用户每秒可以获得最大x
点数”会更容易,如果他们最后一次获得点数小于y
,则不要添加点数。设置会话变量。如果你已经在跟踪时间,不要再跟踪时间了。使用数据库作为存储来跟踪时间。我不能限制用户x点,因为不同的网站赚取的硬币数量不同。还有,我该如何设置会话变量或使用数据库作为存储来跟踪它呢?没有什么可以阻止某人在不同的浏览器中打开surf.php。尽管您好,我不太清楚您的意思。你能给我举个例子吗?或者我怎样才能把这些融入到我的网站中?你如何追踪用户获得的硬币?在你重新开始计数之前,检查以确保他们没有获得硬币。