我有使用 stringByEvaluatingJavaScriptFromString 调用的 JS,运行大约需要 9 秒,但如果用户需要,我希望能够立即取消它。
然而,似乎整个线程都被这个阻塞了。
我准备做任何事情来允许用户取消它(例如删除 UIWebView ),但似乎没有任何效果,因为应用程序在继续之前等待 stringByEvaluatingJavaScriptFromString 返回。
我有使用 stringByEvaluatingJavaScriptFromString 调用的 JS,运行大约需要 9 秒,但如果用户需要,我希望能够立即取消它。
然而,似乎整个线程都被这个阻塞了。
我准备做任何事情来允许用户取消它(例如删除 UIWebView ),但似乎没有任何效果,因为应用程序在继续之前等待 stringByEvaluatingJavaScriptFromString 返回。
不知道怎么取消。为了改进 UI,从这个UIWebView stringByEvaluatingJavaScriptFromString in background,
尝试将您的 JavaScript 拆分为离散的执行块,并使用 JavaScript 计时器将它们流水线化,如下所示(JS 代码,而不是 Obj-C):
var i = 0;
var operation = function() {
switch (i) {
case 0:
//do first part of code
break;
case 1:
//do second part of code
break;
case 2:
//do third part of code
break;
etc...
}
//prepare to execute next block
i++;
if (i < TOTAL_PARTS) {
setTimeout(operation, 0);
}
};
operation();
这将防止您的脚本在执行时阻止用户交互。
有关更多详细信息,请检查该线程UIWebView stringByEvaluatingJavaScriptFromString in background。