我有定期执行活动的JavaScript.当用户没有看到该站点时(即窗口或选项卡没有焦点),最好不要运行.
有没有办法使用JavaScript?
我的参考点:如果您使用的窗口未处于活动状态,则Gmail聊天会播放声音.
我有一个功能,当点击它时显示一个菜单,我希望它在5秒后消失.这是我的javascript - 它可以在桌面浏览器上正常运行,但它不会在移动设备上消失.
$(function() {
$('#prod_btn').click(function() {
$(this).addClass('selected').next('ul').css('display', 'block');
setTimeout(hideMenu, 5000);
});
});
function hideMenu() {
$('#prod_btn').removeClass('selected').next('ul').css('display', 'none');
}
Run Code Online (Sandbox Code Playgroud)
问题出在哪儿?
谢谢
这是我能想到的最简单的复制代码:
ms = 30; // 1000 ?
num = 1;
function test()
{
num+=ms;
document.getElementById('Submit').value = num; // Using native Javascript on purpose
if (num < 4000)
window.setTimeout(test, ms);
}
test()
Run Code Online (Sandbox Code Playgroud)
我将ms(迭代之间的毫秒数)设置为30,运行脚本并移动到浏览器上的不同选项卡.
然后我等待大约10秒钟(脚本应该在4秒内完成)然后回到选项卡.
如果我使用Firefox,我看到脚本还没有完成,数字仍然在运行(从我离开它们的地方恢复,我猜).
这很烦人,
但如果我改为ms1000并重复上述步骤,当我回到标签时,我看到脚本确实已经完成了.
(该脚本仍需要4秒钟才能完成).
也就是说,即使窗口没有焦点,有时Firefox也会运行window.setTimeout,有时它不会.可能取决于持续时间
另一方面,Internet Explorer不会发生这种情况.
即使选项卡没有聚焦,它也会继续运行脚本.无论我怎么设置ms.
这是由于Firefox的某些性能考虑因素吗?
究竟发生了什么?
现在,如何在浏览器之间保持一致的基本功能?
或者,我工作错了吗?编码是一种奇怪的方式吗?
我只是尝试以延迟的方式反复更改DOM,而不使用setInterval(因为我正在改变它自己的间隔).
我不能假设我的用户不会离开标签.
我想让我的用户离开页面,就像人们想要的那样.
如果一个人离开并在半小时后回来,他/她将在页面上看到不相关的动画,仍在运行.
连接到该页面的所有用户都可以看到其中一些动画.
它们不需要以毫秒的分辨率同步,但只有当用户将选项卡/窗口置于焦点时才能启动它们.
我正在使用Firefox 25.0.1和IE 11.(Windows 7)
观察:我在Polymer中运行SPA,当我在chrome的新背景标签中打开内部链接时,页面没有完成加载(ajax和all),直到我专注于选项卡.
问题:什么是等待用户关注的chrome -or-什么是Polymer在完成呈现页面和发送ajax请求之前等待的内容?
额外奖励:我如何打开一个开发工具面板,其目标是我在后台打开的标签,以观察/未发生的情况?
奖励答案:如果您在选项卡上打开开发工具,导航离开选项卡,然后刷新开发工具,相关选项卡也将刷新并模拟已在背景中打开.
这与以下内容有关:
用于El Capitan的
Safari 9.1 用于Sierra的Safari 10
当浏览器或标签失去焦点(主要是最小化)时,是否有人知道Safari在JavaScript引擎中针对setTimeout()做什么?
我创建了一个简单的JavaScript Web应用程序,该应用程序在Safari中加载,该应用程序调用JavaScript setTimeout(),该方法将在超时值之后传递另一个要执行的函数。该函数将日期/时间打印到控制台,然后以相同的超时值调用setTimeout()。
如果Safari选项卡失去焦点或浏览器最小化,则一段时间后Safari似乎停止执行setTimeout和随后的要调用的函数,直到返回焦点为止,才执行任何函数。就像事件循环停止处理一样。
注意:不会丢失任何函数调用,它们只会暂停,并在浏览器重新获得焦点时重新启动。
我在Firefox,Chrome或IE11中没有注意到这一点。
引起此问题的主要原因是该问题主要是在我维护的Web应用程序中观察到的,该应用程序使用CometD进行与服务器的通信。CometD库使用setTimeout每30秒执行一次向服务器的请求。如果运行该应用程序的浏览器最小化,则CometD似乎停止与服务器通信,直到再次最大化浏览器为止。
IE11 有一个有据可查的 iframe 内存泄漏。在 SPA 中,如果您使用 iframe,内存将增长到大约 1.5GB,之后它会变慢直到崩溃。
我的任务是检测浏览器何时崩溃并尽快重新启动页面。该应用程序是嵌入在 ASP.NET MVC 中的 Vue.JS。
IE11 浏览器中提供了哪些内存/性能检测?
其他想法?谢谢。:)
来源:https : //developer.microsoft.com/en-us/microsoft-edge/platform/issues/10186458/ https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8449104/ http://support.sas.com/kb/60/514.html
javascript performance memory-leaks internet-explorer-11 vue.js
javascript 中是否有任何方法可以像 setInterval() 一样,并且会在用户离开选项卡时停止并在用户再次进入选项卡时恢复?
我有一个特定于iOS 5的问题,相同的代码适用于ios 4.X和其他桌面浏览器.
我每隔几秒就使用JavaScript做一些事情,现在问题是当我切换到iPad safari中的另一个标签时,这个脚本停止工作.
当我切换回此选项卡时,它会再次开始工作.
您可以在此页面上重现它, http://www.w3schools.com/js/tryit.asp?filename = tryjs_timing_infinite
访问此链接,单击开始计数,然后转到其他浏览器选项卡.当您在几秒钟后返回此选项卡时,您会注意到当选项卡未激活时计数器没有增加.
我认为Apple这样做是为了提高性能.有人可以建议一个解决方案让它工作,我完全坚持这个问题?
有人可以解释一下为什么脚本(下面带有setTimeout命令)在Greasemonkey中执行所需的时间(400-500毫秒)比在Firefox控制台中执行的时间长100毫秒(400-500毫秒)吗?
var start = new Date ().getTime ();
console.log (
new Date ().getHours ()+" : " + new Date ().getMinutes ()
+ " : " + new Date ().getSeconds () + " : "
+ new Date ().getMilliseconds ()
);
setTimeout (foo,100);
//foo ();
function foo () {
var time = new Date () - start;
console.log ("Execution time: " + time + "ms");
}
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为如果我切换setTimeout(foo,100)为pure foo(),那么Greasemonkey和Firefox控制台都将以闪电般的速度(〜10毫秒)执行它。
javascript ×9
settimeout ×4
browser ×1
cometd ×1
firefox ×1
focus ×1
greasemonkey ×1
ios5 ×1
ipad ×1
jquery ×1
memory-leaks ×1
performance ×1
polymer ×1
safari ×1
setinterval ×1
vue.js ×1
window ×1