我有定期执行活动的JavaScript.当用户没有看到该站点时(即窗口或选项卡没有焦点),最好不要运行.
有没有办法使用JavaScript?
我的参考点:如果您使用的窗口未处于活动状态,则Gmail聊天会播放声音.
我必须为项目使用vanilla JavaScript.我有一些功能,其中一个是打开菜单的按钮.它适用于目标ID存在的页面,但会导致id不存在的页面出错.在那些函数找不到id的页面上,我收到一个"无法读取属性'addEventListener'的null"错误,我的其他函数都没有工作.
下面是打开菜单的按钮的代码.
function swapper() {
toggleClass(document.getElementById('overlay'), 'open');
}
var el = document.getElementById('overlayBtn');
el.addEventListener('click', swapper, false);
var text = document.getElementById('overlayBtn');
text.onclick = function(){
this.innerHTML = (this.innerHTML === "Menu") ? "Close" : "Menu";
return false;
};
Run Code Online (Sandbox Code Playgroud)
我该如何处理?我可能需要将所有代码包装在另一个函数中或使用if/else语句,以便它只搜索特定页面上的id,但不确定.
如何检测用户是否正在切换到另一个浏览器选项卡?
目前,我有这个:
$(window).on("blur focus", function (e) {
var prevType = $(this).data("prevType");
if (prevType != e.type) { // reduce double fire issues
switch (e.type) {
case "blur":
$('.message').html('<div class="alert alert-error">Oops. You navigated away from the ads <a id="start" class="butt green">Resume</a></div>');
var myDiv = $("#bar");
myDiv.clearQueue();
myDiv.stop();
clearInterval($timer);
$timer = null;
break;
case "focus":
// do work
break;
}
}
$(this).data("prevType", e.type);
});
Run Code Online (Sandbox Code Playgroud)
但这仅在用户最小化活动窗口时才有效.
我想写一个网页进行在线测验.我的基本要求是,如果参加测验的人改变标签或打开新窗口,即使没有最小化浏览器,即如果该人试图从其他窗口/标签看到答案,测验应该停下来.我怎么能这样做?
PS:它不应该是一些非常新的HTML5功能.我希望目前所有主流浏览器都支持它.
我需要在当前页面上检测用户何时处于非活动状态(不是单击或键入)超过30分钟.
我认为最好使用贴在身体标签上的事件blubbling,然后继续重置计时器30分钟,但我不确定如何创建它.
我有jQuery可用,虽然我不确定这有多少实际上会使用jQuery.
编辑:我更需要知道他们是否正在积极使用该网站,因此点击(更改字段或字段中的位置或选择复选框/无线电)或键入(在输入,textarea等).如果他们在另一个选项卡中或使用其他程序,那么我的假设是他们没有使用该网站,因此应该注销(出于安全原因).
编辑#2:所以每个人都清楚,这根本不是用于确定用户是否已登录,经过身份验证或其他任何内容.现在,如果用户在30分钟内没有发出页面请求,服务器会将用户注销.此功能可防止有人花费> 30分钟填写表单然后提交表单以发现他们尚未注销的时间.因此,这将与服务器站点结合使用,以确定用户是否处于非活动状态(不是单击或键入).基本上,交易是在闲置25分钟后,他们将看到一个对话框输入他们的密码.如果他们不在5分钟内,系统会自动将其注销,并且服务器的会话将被注销(下次访问页面时,与大多数站点一样).
Javascript仅用作对用户的警告.如果JavaScript被禁用,那么他们将不会收到警告(并且大部分网站都不工作),他们将在下次请求新页面时注销.
我写了这段代码
function winUnload() {
alert("Unload Window");
MyMethod();
}
window.onunload = function() { winUnload(); }
Run Code Online (Sandbox Code Playgroud)
此代码在IE和Firefox中运行良好.但是此代码在Chrome中无效.双方的陈述alert("Unload Window");和MyMethod();不工作.
IE8中有没有办法检测窗口当前是否处于活动状态(正在活动选项卡/窗口中显示)?
我知道有像onfocusin/ 这样的事件onfocus- 但这不是一个完美的解决方案,因为窗口也必须获得焦点才能触发事件 - 所以当用户只是切换标签而不触摸窗口本身时,这不起作用.
我相信这种普通用例必须有一些简单,优雅的解决方案.
可能重复:
测试窗口是否具有焦点
我经常使用的网站有一个在线聊天功能(弹出窗口,非常类似于Facebook).当我的浏览器不在此站点的选项卡上时,会发出警报以警告我收到任何新的聊天消息,并且当我的浏览器不在此站点的选项卡上时,声音不会发生(按设计我假设) .
这是如何实现的?代码(我假设并因此在我的客户端执行的javascript)如何知道我什么时候/不在看网站?
谢谢
我看过这个:
和:
是否有可靠的方法来确定浏览器选项卡或窗口是否处于非活动状态?
第一个链接为现代浏览器提供了解决方案,但在IE7/8中不起作用.这两个问题都相当陈旧.是否有解决方案来确定访问者是否正在查看他们的打开标签?
我尝试过的几乎所有内容都适用于Chrome.但IE7刚刚失败.
我只想设置一个全局变量来说明页面是否正在被查看.
即
var isActive = true;
$(window).focus(function() {
isActive = true;
});
$(window).blur(function() {
isActive = false;
});
// test
setInterval(function () {
console.log(window.isActive ? 'active' : 'inactive');
}, 1000);
Run Code Online (Sandbox Code Playgroud) 我想播放动画并确保访问者会看到它.我的问题是,当有人在后台打开一个新的浏览器选项卡时(例如通过单击链接target="_blank"),文档的就绪事件是不够的,因为访问者有可能仅在几分钟后才会看到该站点,所以他不会从一开始看到动画或任何东西.
有没有办法在用户点击浏览器选项卡时启动我的动画(通过运行正确的JavaScript函数)?是否有可能模仿此行为的事件或任何其他解决方法?如果代码仅在第一次执行或每次用户单击浏览器选项卡时执行都无关紧要.