在 iOS 应用程序中,我使用 stringByEvaluatingJavaScriptFromString 在 UIWebView 上运行一个相当大的脚本(就 javascript 字符串的长度而言很大)。调用 javascript 后会出现短暂的停顿,导致屏幕上的其他元素暂停片刻。
将 javascript 调用放置在后台使用 self performSelectorInBackground 调用的函数中会破坏应用程序。是否有一种安全的方法来调用在后台线程上运行它或以其他方式防止界面暂停?
最佳答案
不,Webviews 和 Webkit JavaScript 引擎都是单线程的,不能在后台线程上使用。
更好的选择是将 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();
这将防止您的脚本在执行时阻止用户交互
关于objective-c - UIWebView stringByEvaluatingJavaScriptFromString 在后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9196620/