WkWebView経由でナビゲートしているローカルHTMLページにリモートJavscriptアセットタグがあり、ダウンロードが完了しません(iOSデバイスがインターネットに接続されていない場合、またはデバイスのインターネットが遅すぎる場合の両方)。
残念ながら、WKWebViewはこのアセットのダウンロードを中止したり、WKNavigationDelegateに移動したりすることはありません(つまり、-webView:didFailNavigation:withError:
も-webView:didFinishNavigation: neither
も呼び出されません)。そのため、ユーザーは完全に表示されない空白のHTMLページでスタックします解決し、エラーが発生することはありません。
ありがたいことに、SafariリモートiOS Javascriptデバッガーを介してデバッグしたいくつかのシナリオでは、コンソールに記録されたエラーFailed to load resource: The Internet connection appears to be offline
が発生することに気付きましたが、他のシナリオ(機内モードの特定のデバイスなど)では、WKWebViewが表示されないようです。このエラーでタイムアウトするか、あきらめるため、WKNavigationDelegateコールバックは発生しません。
このシナリオは、iOS8.2シミュレーターを任意のWKWebViewiOSアプリケーションで使用し、ローカルで提供されるHTMLファイルに移動し、任意のリモートURLでスクリプトタグを追加してから、を使用してインターネット接続を「100%損失」に調整することで独自に再現できます。 Appleの ネットワークリンクコンディショナー 。
WKNavigationDelegateへのエラーまたは成功のコールバックを介してWkWebViewを強制的にタイムアウト/リターンさせる最良の方法は何でしょうか。
試してください:
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error
エラーを確認できます。通常、エラーが発生します。コード-1009:
このリストを確認してください: エラーコード
HTMLページでこれを行う必要があると思います。タイマーを実行し、リモートスクリプトがロードされているかどうかを確認する小さなJavaScriptをそこに含めることができます。
ロードされていない場合、JavaScriptはページにエラーを直接表示するか、スクリプトメッセージハンドラーを介してアプリケーションに通知することができます。
(HTMLには、ページがコンテンツの読み込みエラーを見つけるために使用できるAPIがないと思います。 外部スクリプトが読み込まれていることを確認してください )にいくつかのヒントがあります。