Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
取消stringByEvaluatingJavaScriptFromString_Javascript_Objective C_Ios - Fatal编程技术网

取消stringByEvaluatingJavaScriptFromString

取消stringByEvaluatingJavaScriptFromString,javascript,objective-c,ios,Javascript,Objective C,Ios,我有一个使用stringByEvaluatingJavaScriptFromString调用的JS,运行大约需要9秒,但是如果用户需要,我希望能够立即取消它 然而,似乎整个线程都被这个阻塞了 我准备做任何事情来允许用户取消此操作(例如,删除UIWebView),但在应用程序等待stringByEvaluatingJavaScriptFromString返回后再继续操作时,似乎什么都不起作用。不确定如何取消它。为了改善用户界面,从这个 尝试将您的JavaScript拆分为离散的执行块,并使用Jav

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

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


我准备做任何事情来允许用户取消此操作(例如,删除UIWebView),但在应用程序等待stringByEvaluatingJavaScriptFromString返回后再继续操作时,似乎什么都不起作用。

不确定如何取消它。为了改善用户界面,从这个

尝试将您的JavaScript拆分为离散的执行块,并使用JavaScript计时器将其管道化,如下所示(JS代码,而不是Obj-C):

var i=0;
var操作=函数(){
开关(一){
案例0:
//执行代码的第一部分
打破
案例1:
//执行代码的第二部分
打破
案例2:
//执行代码的第三部分
打破
等
}
//准备执行下一个块
i++;
如果(i<总零件){
设置超时(操作,0);
}
};
操作();
这将防止脚本在执行时阻止用户交互

有关更多详细信息,请检查该线程

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();