2015-03-10 14 views
10

Istnieje zdalny znacznik zasobu Javscript na lokalnej stronie HTML, do której nawiguję przez WkWebView, która nigdy się nie kończy (zarówno w przypadku, gdy urządzenie iOS nie jest podłączone do Internetu lub internet urządzenia jest zbyt wolny).WKWebView nie kończy/timeout, gdy nie ma dostępu do Internetu

Niestety WKWebView nigdy przerywa próbuje pobrać ten składnik ani nie kiedykolwiek przejść do mojego WKNavigationDelegate (czyli ani -webView:didFailNavigation:withError: ani -webView:didFinishNavigation: neither się nazywa), dzięki czemu użytkownicy są skazani na pustej stronie HTML, który nigdy w pełni nie rozwiązuje i nigdy błędów na zewnątrz.

Na szczęście w niektórych scenariuszach debugowałem za pomocą zdalnej przeglądarki Safari iOS, zauważyłem, że dostaliśmy błąd Failed to load resource: The Internet connection appears to be offline zalogowanego do konsoli, ale w innych (jak niektóre urządzenia w trybie samolotowym) WKWebView nigdy nie wydaje się timeout z tym błędem lub poddaj się, więc nie wywołaj wywołań zwrotnych WKNavigationDelegate.

Możesz samodzielnie odtworzyć ten scenariusz za pomocą symulatora iOS 8.2 z dowolną aplikacją WOSWebView iOS, przejść do dowolnego pliku HTML obsługiwanego lokalnie, a następnie dodać znacznik skryptu z dowolnym zdalnym adresem URL, a następnie zmniejszyć przepustowość połączenia internetowego do "100 % Straty "przy użyciu Apple Network Link Conditioner firmy Apple.

Jaki byłby najlepszy sposób, aby zmusić WkWebView do przekroczenia limitu czasu/powrotu przez błąd lub oddzwonienie do jego WKNavigationDelegate?

Odpowiedz

0

Myślę, że będziesz musiał to zrobić na swojej stronie HTML. Możesz dołączyć mały skrypt JavaScript, który uruchamia timer i sprawdza, czy Twój skrypt zdalny został załadowany czy nie.

Jeśli nie został załadowany, JavaScript może pokazać błąd bezpośrednio na stronie lub powiadomić aplikację za pomocą obsługi komunikatów skryptowych.

(nie sądzę HTML ma API, że strona może użyć, aby dowiedzieć się o treści błędów wczytywania Istnieje kilka wskazówek o tym na Verify External Script Is Loaded.)

+0

Jak mogę sprawdzić w JavaScript, aby zobaczyć, czy tag HTML skryptu zdalnego zakończył się ładowanie? Zdalny skrypt uruchamia wszystko w bezpośrednio wywołanej funkcji, więc nie ma zmiennych globalnych, które mogę sprawdzić pod kątem istnienia. – depthfirstdesigner

13

Spróbuj:

WKNavigationDelegate

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

można sprawdzić błąd, zazwyczaj masz error.code -1009:

Sprawdź tę listę: Error Codes

+1

To powinna być zaakceptowana odpowiedź. – superpuccio

+2

-1 Ta metoda nie będzie wywoływana przez bardzo długi czas, a zatem nie będzie odpowiedzią. Obejrzałem minutę, zanim wywołano '-webView :: didFinishNavigation:'. Prawdziwe pytanie OP znajduje się w ostatnim akapicie. – David

+1

Prawie natychmiastowo zawiesza się w trybie samolotowym; przegłosowane. –

Powiązane problemy