Próbuję dowiedzieć się, dlaczego coś z JavaScriptem nie działa w UIWebView. O ile mi wiadomo, nie ma możliwości ustawienia punktu przerwania wewnątrz XCode dla pliku js. Nie ma problemu, po prostu wrócę do 2004 roku i użyję statystyk alertów - och, czekaj, one też nie działają w UIWebView!
Jedyne, o czym mógłbym pomyśleć, to wyeksportowanie moich plików HTML i JS na mój pulpit, a następnie wykonanie debugowania w Safari. I to działa! Ale oczywiście błąd, z którym walczę w UIWebView, nie występuje w Safari.
Czy są jakieś inne sposoby debugowania wewnątrz UIWebView lub jakieś sztuczki, których mogę użyć, podobnie jak przy użyciu starej metody alertów?
źródło
Settings
>Safari
>Advanced
>Web Inspector
<- to umożliwićTo zapytanie znajduje się na szczycie Google, więc warto połączyć się z remoteInspector ukrytym w iOS5 - zdecydowanie najlepszym znalezionym dotychczas sposobem debugowania UIWebViews - po prostu kompiluj warunkowo przed wysłaniem do Apple.
źródło
[NSClassFromString(@"WebView") performSelector:@selector(_enableRemoteInspector)];
pamiętaj, aby usunąć wywołanie podczas kompilacji do wydania!alert () z pewnością działa dla mnie.
Możesz jednak zrobić również wiele innych rzeczy, na przykład utworzyć własny alert DHTML, który pojawi się w warstwie. Może to być przyjemne, ponieważ możesz zrobić wiele alertów dla jednego elementu DIV bez zatrzymywania aplikacji. Powinieneś także móc zapisać do niego ślad stosu (ślad stosu znajduje się w obiekcie wyjątku i zawsze możesz zgłosić własne wyjątki).
Alternatywnie, jeśli działasz na symulatorze, twoja niestandardowa funkcja „alert ()” może wywołać cel C i wyświetlić ciąg znaków w oknie konsoli symulatora iPhone'a:
a po stronie obiektywu C:
To powiedziawszy, mam aplikację, która jest ciężka w UiWebView / javascript i zwykle robię większość programowania javascript w Chrome (symulując to, co jest konieczne ze środowiska iPhone'a)
źródło
Mam nadzieję, że to pomoże.
Krok 1: Otwórz Safari VC na swoim Macu (hahaha, nie rób swojej twarzy, jeśli mówię na twoim Macbooku, po prostu wykonaj moje kroki)
Krok 2: Przejdź do preferencji Safari i kliknij Advance. Otrzymasz to ustawienie na ekranie MacBooka.
Teraz włącz Pokaż, aby rozwinąć menu na pasku menu. Teraz Twoja Cała praca jest wykonana. Myślisz, że żartuję: P: P nie, człowieku ...
Krok 3: Uruchom aplikację w urządzeniu lub w symulatorze. (Don't Think Just run) I przejdź do aplikacji, w której otwierasz Webview lub SFSafariViewController. Do tej pory nie rozumiałeś, wiem. Spokojnie i zobacz mój następny krok.
Krok 4: Otwórz Safari na swoim MacBooku i kliknij opcję Rozwiń na pasku menu. Czy masz coś, co Twój MacBook, iPad / iPhone wyświetla dobrze ?????
Krok 5: Gotowe. kliknij swoje urządzenie i kliknij URL Nowe okienko wyskakuje w ten sposób.
Krok 6: to, czego teraz szukasz, to tutaj wszystkie kroki.
IMP: Nie zapomnij włączyć opcji Zobacz poniżej obraz
źródło
Jeszcze tego nie próbowałem, ale spójrz na tego Weinre
Wygląda bardzo obiecująco.
źródło
To jest stare pytanie. Ale nadal będę chciał podzielić się moimi dwoma centami.
Używam jsconsole.com do zdalnego debugowania. To jest łatwe. Wystarczy dołączyć tag skryptu i użyć dzienników konsoli do debugowania przez drukowanie. Może to również służyć do debugowania na prawdziwym urządzeniu.
źródło
Stare pytanie, ale chyba znalazłem najlepsze rozwiązanie, w moim przypadku trzeba debugować uiwebview, ale nie miałem dostępu do aplikacji IOS a tylko do treści html i musiałem przejrzeć kilka logów JS, dodałem następujący kod aby załadować lekki firebug JS i wyświetlić go automatycznie:
wywołując go z JS
lub załaduj go z html
źródło
Możesz skonfigurować system podobny do używanego w PhoneGap do wysyłania wiadomości z JavaScript do Objective-C i stamtąd do logowania. Krótko mówiąc, ustawiają document.location przy użyciu niestandardowego schematu i blokują ten schemat w wywołaniu zwrotnym delegata.
Możesz skorzystać z faktu, że UIWebView jest większością delegatów dla WebView. WebKit jest technicznie nieudokumentowany dla iPhone'a, ale w większości jest taki sam, jak określono w nagłówkach WebKit dla komputerów stacjonarnych, prawdopodobnie włączając WebScriptObject. Używam tego do debugowania, ale pamiętaj, aby usunąć ten kod przed przesłaniem do Apple.
Aby uzyskać WebView z UIWebView, zaimplementuj metodę delegata, taką jak
-(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrame
w podklasie UIWebView. Zadzwoń super, jeśli używasz tego.źródło