2012-01-20 31 views
10

Umieściłem wiele obiektów obok siebie w UIScrollView. Co UIWebView zawiera widok "przeglądarki internetowej" wyświetlający lokalny plik HTML. Niestety nie mam pojęcia, jak załadować strony internetowe w tle i jednocześnie zapobiec lub zatrzymać wykonywanie funkcji JavaScript, które są zawarte w plikach HTML. Mam na myśli "w tle", gdy oglądam kilka pierwszych paneli, aw międzyczasie pozostałe panele po prostu leniwie ładują się cicho. Widziałem różne aplikacje (takie jak pugpig) - to leniwy ładuje strony HTML i zatrzymuje animacje JavaScript - może jakoś zatrzymać JavaScript, aby animować cały efekt zanikania, którego często używam na moich stronach HTML między przełącznikami tabulacji iw tej chwili Załaduję panel, który kontynuuje animację zaniku.Wstrzymaj wykonywanie kodu JavaScript w interfejsie UIWebView

Więc pytanie brzmi:

Jak mogę wstrzymać animacji JavaScript i uniknąć problemów z pamięcią za pomocą kodu Objective-C i jak mogę kontynuować animację blaknięcie raz wyświetlić panel?

Odpowiedz

4

Czy próbowałeś wstrzykiwanie JavaScript (tj - (NSString*) stringByEvaluatingJavaScriptFromString: (NSString *)script), który zauważa onblur i onfocus z window lub pageshow i pagehide? This post proponuje kilka rozwiązań.

Więc można spróbować czegoś podobnego

$(window).blur(function(){ 
    // when the web view loses focus 
}); 
$(window).focus(function(){ 
    // when the web view gains focus 
}); 

Jeśli to zawiedzie, można spróbować pagehide i pageshow zdarzenia:

function pageShown(evt) 
{ 
    if (evt.persisted) 
     // The page was just restored from the Page Cache 
    else 
     // The initial load. This is the same as the page load event 
} 

function pageHidden(evt) 
{ 
    if (evt.persisted) 
     // The page was suspended and placed into the Page Cache 
    else 
     // This is the same as the page unload event 
} 

window.addEventListener("pageshow", pageShown, false); 
window.addEventListener("pagehide", pageHidden, false); 
0

Może spróbujesz oceny (za pomocą stringByEvaluatingJavaScriptFromString) celowo-wadliwy fragment kodu javascript i powodować, że js-interpreter się dusi?

<script> var j =  // note: missing value, error! 
</script> 
1

Myślę, że można kontrolować javascripts animację, która działa w HTML (mówiłeś, że strona jest lokalny). Co powinienem zrobić, to owinąć animację w funkcję JS, która zostanie wywołana z Cocoa (jest tam mnóstwo odniesień do tego na StackOverFlow np. - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script).

Następnie chciałbym utworzyć stos, który ma rekord dla każdej ze stron HTML, które chcesz leniwy załadować. Na każdym UIScrollView scrollViewDidScroll: chciałbym sprawdzić, czy przewinął się rozmiar całego rozmiaru przeglądarki internetowej, jeśli tak bym wyskoczył ten rekord ze stosu i wywołał funkcję Javascript startAnimation, o której mówiliśmy wcześniej w następnym widoku sieciowym.

Jeśli potrzebujesz dwustronnej komunikacji (z javascript do kakao) na przykład, aby wskazać, że animacja została zakończona, możesz użyć JSBridge. (How do I call an Objective-C method from JavaScript on UIWebView?)

Powiązane problemy