Beim Schreiben einer iPhone / iPad-App mit einer UIWebView ist die Konsole nicht sichtbar. Diese ausgezeichnete Antwort zeigt, wie man Fehler abfängt, aber ich möchte auch die console.log () verwenden.
javascript
ios
uiwebview
TinkerTank
quelle
quelle
Antworten:
Nachdem er sich heute mit einem geschätzten Kollegen beraten hatte, machte er mich auf das Safari Developer Toolkit aufmerksam und darauf, wie dieses mit UIWebViews im iOS-Simulator für die Konsolenausgabe (und das Debuggen!) Verbunden werden kann.
Schritte:
[the name of your UIWebView file]
Sie können jetzt komplexes (in meinem Fall flot ) Javascript und andere Dinge in UIWebViews ablegen und nach Belieben debuggen.
BEARBEITEN: Wie von @Joshua J McKinnon hervorgehoben, funktioniert diese Strategie auch beim Debuggen von UIWebViews auf einem Gerät. Aktivieren Sie einfach den Web Inspector in Ihren Geräteeinstellungen: Einstellungen-> Safari-> Erweitert-> Web Inspector (Prost @Jeremy Wiebe)
UPDATE: WKWebView wird ebenfalls unterstützt
quelle
Ich habe eine Lösung, um mich mit Javascript bei der Apps-Debug-Konsole anzumelden. Es ist ein bisschen grob, aber es funktioniert.
Zuerst definieren wir die Funktion console.log () in Javascript, die einen Iframe mit einer ios-log: url öffnet und sofort entfernt.
Jetzt müssen wir diese URL im UIWebViewDelegate in der iOS-App mit der Funktion shouldStartLoadWithRequest abfangen.
quelle
Hier ist die Swift-Lösung: (Es ist ein kleiner Hack, den Kontext zu ermitteln.)
Sie erstellen die UIWebView.
Rufen Sie den internen Kontext ab und überschreiben Sie die Javascript-Funktion console.log () .
quelle
JavaScriptCore
Framework mit Ihrem Projekt undimport
seiner Webview-Swift-Datei zu verknüpfen .Ab iOS7 können Sie die native Javascript-Brücke verwenden. Etwas so Einfaches wie das Folgende
quelle
UIWebview
, können Sie allesJSContext
einrichten.JSContext
noch in iOS 8+ mitWKWebView
?- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
und es funktioniert perfekt!WKWebView
und iOS 11.4.1 versucht und er kann nicht findendocumentView
und stürzt ab. Ich habe diese Antwort gesehen und es scheint, dass dies nicht möglich ist.NativeBridge ist sehr hilfreich für die Kommunikation von einer UIWebView zu Objective-C. Sie können damit Konsolenprotokolle übergeben und Objective-C-Funktionen aufrufen.
https://github.com/ochameau/NativeBridge
Der Vorteil dieser Technik besteht darin, dass beispielsweise Zeilenumbrüche in Protokollnachrichten beibehalten werden.
quelle
console.log
, aber diewindow.onerror
Funktion in dieser Antwort ist sehr nützlich!Versuchte Leslie Godwins Lösung, bekam aber diesen Fehler:
Für Swift 2.2 hat Folgendes für mich funktioniert:
Sie müssen JavaScriptCore importieren, damit dieser Code kompiliert werden kann:
Wenn Sie dann in Ihrem Javascript-Code console.log ("_ your_log_") aufrufen, wird in der Xcode-Konsole gedruckt.
Besser noch, fügen Sie diesen Code als Erweiterung zu UIWebView hinzu:
Rufen Sie diese Methode dann während Ihres UIWebView-Initialisierungsschritts auf:
quelle
Swift 5
quelle