2011-06-27 16 views

Odpowiedz

19

Czy używasz dowolnego skryptu Javascript na ładowanej stronie?

szczególności używasz metody

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script 

Jak stanu docs następujące

JavaScript czas realizacji jest ograniczony do 10 sekund dla każdego punktu wejścia najwyższego poziomu. Jeśli skrypt wykonywany przez dłużej niż 10 sekund, widok internetowej zatrzymuje wykonanie skryptu

I to wydaje się, aby związać się z komunikatem o błędzie widzisz w konsoli

+1

im pracy na aplikacji Twitter. Widok internetowy ładuje stronę logowania do Twittera. Po wprowadzeniu moich danych uwierzytelniających i kliknięciu "Autoryzuj aplikację" mój kontroler widoku modalnego odrzucił, ale przyciski w widoku w tle zostały zatrzymane. –

+0

Czy możesz umieścić dowolny kod, aby uzyskać lepszy wgląd w sposób implementacji? Na przykład, czy ręcznie włączasz/wyłącza przyciski w widoku tła, a jeśli tak, to czy używasz metod delegatów webView do zarządzania tym? –

+0

Rozwiązałem problem. Był widok tła, który nie został usunięty po zwolnieniu kontrolera widoku modalnego. W każdym razie dzięki mikrokolumnie za odpowiedź. –

3

FWIW, wygląda moja szczególności timeout wystąpił z powodu błędu javascript w rzadkich sytuacjach. Możesz spróbować owinąć swój JS w try/catch lub poprawić go, aby był bardziej odporny na błędy.


Więcej szczegółów: używałem następujący JS ciąg:

NSString* js = @"document.getElementById(\"main\").offsetHeight"; 
int height = [[_web_view stringByEvaluatingJavaScriptFromString:js] intValue]; 

Wiedziałem, że ten problem UIWebView może się zdarzyć, jeśli widok internetowa nie była w pełni załadowany (np JS wezwany przed webViewDidFinishLoad.: metoda, więc domyśliłem się, że być może „głównym” celem brakowało zatem, że zmodyfikowane moje JS na następujące i to działało..

NSString* js = @"document.getElementById(\"main\") ? document.getElementById(\"main\").offsetHeight : -1"; 
+0

Hmmm to brzmi interesująco, czy ktoś inny może potwierdzić, że to pomaga rozwiązać problem? –

0

Poniżej fragment kodu pracował dla mnie

if(!webview.isLoading) 
{ 
    // update your code. 
} 
0

Spróbuj użyć WKWebView zamiast UIWebView.this działa dla mnie.

W moim przypadku próbuję użyć UIWebView, aby otworzyć lokalny PDF. Część pliku PDF może zawierać trochę kodu JS. Następnie pojawia się ten problem.

Po użyciu WKWebView, wszystko działa po prostu idealny

Apple zaleca również do korzystania WKWebView jeśli aplikacja, która działa w iOS 8 i później