1

我有使用 stringByEvaluatingJavaScriptFromString 调用的 JS,运行大约需要 9 秒,但如果用户需要,我希望能够立即取消它。

然而,似乎整个线程都被这个阻塞了。

我准备做任何事情来允许用户取消它(例如删除 UIWebView ),但似乎没有任何效果,因为应用程序在继续之前等待 stringByEvaluatingJavaScriptFromString 返回。

4

1 回答 1

0

不知道怎么取消。为了改进 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

于 2012-11-06T08:28:36.080 回答