我有使用 stringByEvaluatingJavaScriptFromString 调用的 JS,运行需要大约 9 秒,但如果用户需要,我希望能够立即取消此操作。
然而,整个线程似乎被这个阻塞了。
我准备做任何事情来允许用户取消此操作(例如删除 UIWebView ),但似乎没有任何效果,因为应用程序等待 stringByEvaluatingJavaScriptFromString 返回然后再继续。
最佳答案
不知道如何取消。为了改善UI,从这个UIWebView stringByEvaluatingJavaScriptFromString in background ,
尝试将 JavaScript 分成离散的执行 block ,并使用 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 .
关于javascript - 通过从字符串评估 JavaScript 来取消字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13246504/