アプリがバックグラウンドに移行する前に、JavaScriptが時間内に実行されない可能性があります。appdelegateのapplicationWillResignActiveメソッドでbackgroundTaskを実行することで、より多くの時間を要求できます。
bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid){
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
});
}];
また、JavaScriptが完了したことがわかったら、バックグラウンドタスクを必ず終了してください(JavaScriptはWebビュー内にあるため、N秒後に呼び出すしか方法がない場合があります)。
// After N sections execute this:
if (bgTask != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}