Javascript:Suppress";停止运行此脚本?“;,或者如何使用setTimeout?
我正在构建一个js库,它可以读取二进制文件,包括zip文件 由于二进制数据数组没有直接的本机支持,因此当zip文件变大时,必须进行大量复制(详细信息) 这将导致“停止运行此脚本?”警报。现在,我知道如果有一个无限循环,这可能发生,但在我的例子中,这不是一个无限循环。这不是程序中的错误。这只需要花很长时间Javascript:Suppress";停止运行此脚本?“;,或者如何使用setTimeout?,javascript,Javascript,我正在构建一个js库,它可以读取二进制文件,包括zip文件 由于二进制数据数组没有直接的本机支持,因此当zip文件变大时,必须进行大量复制(详细信息) 这将导致“停止运行此脚本?”警报。现在,我知道如果有一个无限循环,这可能发生,但在我的例子中,这不是一个无限循环。这不是程序中的错误。这只需要花很长时间 我怎样才能抑制这种情绪 我相信这个功能是特定于Firefox和/或其他浏览器的,它与javascript语言本身无关 据我所知,你(程序员)无法在访问者的浏览器中停止它。你可以将进程分成增量,然
我怎样才能抑制这种情绪 我相信这个功能是特定于Firefox和/或其他浏览器的,它与javascript语言本身无关
据我所知,你(程序员)无法在访问者的浏览器中停止它。你可以将进程分成增量,然后使用
setTimeout
添加一个小延迟。在IE(也可能是Firefox)中,消息基于执行的语句数量,而不是运行时间。如果您可以将一些处理拆分为一个单独的函数,并使用setTimeout延迟它,我相信它不会计入限制。此消息是出于安全原因启用的,因为否则您可以简单地通过一个简单的永无止境的循环来阻止用户浏览器。我认为没有办法使它失效
考虑将处理分成几个部分,并通过
setTimeout
对它们进行调度,这应该会超出消息的范围,因为脚本现在不是一直在运行。…回答我自己的问题,这样我就可以发布我使用的代码了
主要问题是,我使用readToEnd()方法读取文件的全部内容,实际上每次读取一个字节。当读取一个大文件时,需要花费很长时间。解决方案是异步、批量读取
这是我使用的代码:
readToEndAsync : function(callback) {
_state = "";
var slarge = "";
var s = "";
var txtrdr = this;
var readBatchAsync = function() {
var c = 0;
var ch = txtrdr.readChar();
while(ch != null)
{
s += ch;c++;
if(c > 1024)
{
slarge += s;
s = "";
break;
}
ch = txtrdr.readChar();
}
if (ch!=null){
setTimeout(readBatchAsync, 2);
}
else {
callback(slarge+s);
}
};
// kickoff
readBatchAsync();
return null;
},
并称之为:
textReader.readToEndAsync(function(out){
say("The callback is complete");
// the content is in "out"
});
为什么要用Javascript读取ZIP文件?为什么要用Javascript读取ZIP文件?因为我能。我想看看这是否可能,所以我正在建造它。我可以想象一些可能的应用。我不知道这会有多实际。目前,它可以工作,但对于一个145kb的文件,解压/解压需要几秒钟。不需要延迟-即使超时为零,也会允许返回事件循环并重置警告。谢谢,我知道消息存在的原因。我确实使用了setTimeout()来解决这个问题。