是可以拦截浏览器消息,如:拦截浏览器慢脚本消息
火狐:
此页上的脚本可能忙,或者 它可能已停止响应。您 现在可以停止脚本,在调试器中打开 脚本,或者让 脚本继续。
I.E.
此页上的脚本导致您的网页浏览器运行缓慢。如果 继续运行,您的计算机可能会 无响应。
由于页面有很多javascript/jquery活动,因此发生这些消息。
我认为这些消息首先出现的事实表明存在更广泛的问题,但是有没有一种方法可以在客户端插入此消息/情况,以便显示更加用户友好的消息?
是可以拦截浏览器消息,如:拦截浏览器慢脚本消息
火狐:
此页上的脚本可能忙,或者 它可能已停止响应。您 现在可以停止脚本,在调试器中打开 脚本,或者让 脚本继续。
I.E.
此页上的脚本导致您的网页浏览器运行缓慢。如果 继续运行,您的计算机可能会 无响应。
由于页面有很多javascript/jquery活动,因此发生这些消息。
我认为这些消息首先出现的事实表明存在更广泛的问题,但是有没有一种方法可以在客户端插入此消息/情况,以便显示更加用户友好的消息?
没有没有办法做到这一点,想象一个恶意用户编写一个脚本会减慢浏览器的速度,直到完全无法使用,现在“慢脚本”警告可能会出现,但如果他能拦截它并防止它被显示?
你需要找到一个潜在问题的解决方案,也就是说,如果你正在做大量的计算(我想你会这样做),你需要将它们拆分成块,把它们放入一个队列中,并以异步方式(如果可能)或按顺序处理它们,但在两者之间有一个小超时。
在伪代码,可能是这样的:
var queue = []; // put your functions or the data in here
function() processQueue{
if (queue.length > 0) {
var item = queue.shift() // pop of the first item of the queue
item(); // call the function, or in case of data pass it to th processing function
setTimeout(processQueue, 100); // wait 100 ms before processing the next chunck
}
}
setTimeout(processQueue, 0);
不,没有办法拦截这些消息,它们在引擎中处于较低级别以保护用户。相反,看看需要花费多长时间,尽可能优化......可能会将你的工作分解成在处理上存在差距的区块,这样你就不会触发这些信息。
感谢尼克,是有道理的。你确切知道这个消息出现的原因吗?是否纯粹只是脚本花费太长时间来执行,而不是与内存相关? – Dan 2010-11-18 10:39:26
@Dan - 有限制,它们因浏览器而异,我认为在IE中它是XXX操作,还有内存限制......只是不确定数字,它们可能会根据浏览器版本的不同而不同。 – 2010-11-18 10:41:32
感谢代码Ivo – Dan 2010-11-18 10:40:50