web-dev-qa-db-ja.com

インターネットにアクセスできない場合、WKWebViewは終了/タイムアウトしません

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を強制的にタイムアウト/リターンさせる最良の方法は何でしょうか。

18

試してください:

WKNavigationDelegate

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error

エラーを確認できます。通常、エラーが発生します。コード-1009:

このリストを確認してください: エラーコード

21
Gabriel.Massana

HTMLページでこれを行う必要があると思います。タイマーを実行し、リモートスクリプトがロードされているかどうかを確認する小さなJavaScriptをそこに含めることができます。

ロードされていない場合、JavaScriptはページにエラーを直接表示するか、スクリプトメッセージハンドラーを介してアプリケーションに通知することができます。

(HTMLには、ページがコンテンツの読み込みエラーを見つけるために使用できるAPIがないと思います。 外部スクリプトが読み込まれていることを確認してください )にいくつかのヒントがあります。

0
Stefan Arentz