1

stringByEvaluatingJavaScriptFromString を使用して呼び出された JS があり、実行に約 9 秒かかりますが、ユーザーが必要とする場合はすぐにキャンセルできるようにしたいと考えています。

ただし、スレッド全体がこれによってブロックされているようです。

ユーザーがこれをキャンセルできるようにするために何かをする準備ができています (たとえば、 UIWebView を削除します) が、続行する前に stringByEvaluatingJavaScriptFromString が返されるのをアプリが待機するため、何も機能しないようです。

4

1 に答える 1

0

キャンセル方法がわかりません。UIを改善するために、このUIWebViewから stringByEvaluatingJavaScriptFromString をバックグラウンドで、

次のように、JavaScript を個別の実行ブロックに分割し、JavaScript タイマーを使用してそれらをパイプライン処理してみてください (Obj-C ではなく JS コード)。

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 に答える