我正在从 javascript 调用网络方法。在 IE 中,如果我向该 Web 方法传递一个巨大的参数,则会弹出警告“停止运行此 sciprt?此页面上的脚本导致 Internet Explorer 运行缓慢”。
是否可以处理"is"按钮上的点击,以便如果用户决定取消脚本执行我可以运行一些替代脚本(在这种情况下,我的“替代”脚本包括关闭一些进度条我在运行长时间脚本之前弹出)。
我看过很多解释如何防止显示此警报的帖子,但我不想停止显示警报:我只想能够处理用户决定停止显示的情况脚本执行。
最佳答案
我之前在一个内部应用程序中处理过这个问题,他们不关心浏览器处理数字需要多长时间,他们只是不想点击提示。
关键是将工作分解成相对可预测的工作 block (在 CPU 时间方面可预测)并在 setInterval 上运行它们,例如:
function doWork(begin, end) {
// Some chunk of what your worker function normally does from begin to end
if (actualEnd < end) // Nothing left to do
clearInterval(Interval);
}
var Interval = setInterval(doWork, 15);
这可以防止出现 IE 提示(或 Chrome 显示“卡住”对话框)。下一步是添加一些代码,让用户完全跳过它;如果一开始就知道工作量,请立即询问他们。如果不是,则开始处理并在 n 个 block 之后询问他们是否愿意执行更便宜的功能。
还有 2 个其他选项可以完成这么多工作:
- 向前看有多少工作要做,如果很多,将它传递给服务器(不幸的是,这意味着在服务器上再次编写你的 JS;当然,你可以使用运行的服务器引擎Javascript 来为自己节省一些代码)。
- 使用来自 Google Gears/HTML5 的后台 worker
最后,如果您按需完成这么多工作,那么您正在执行的工作可能会有加速的机会 - 可以预先在服务器上对数据进行索引以使计算更快/更简单,诸如此类.但我不知道你在计算什么。
关于javascript - 如何处理 "a script on this page is causing internet explorer to run slowly"警报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5700254/