Wie kann ich überwachen, Anfragen auf WKWebview?
Wie kann ich überwachen, Anfragen auf WKWebview?
I ' V versucht, mit NSURLprotocol (canInitWithRequest), aber es wird nicht monitor ajax-requests (XHR), nur die navigation requests(document requests)
InformationsquelleAutor Benzi Heler | 2015-02-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schließlich habe ich es gelöst
Da ich nicht die Kontrolle über den web-Inhalt anzeigen, den ich injiziert, um die WKWebview ein java-Skript, ein jQuery-AJAX-request-listener.
Wenn der listener fängt einen request, so sendet er die native app den request-body in der Methode:
Die native app fängt die Nachricht in einer delegieren genannt:
und führen Sie die entsprechenden Aktionen
hier ist der relevante code:
ajaxHandler.js -
Meiner ViewController delegieren sind:
Und in meinem
viewDidLoad()
, ich bin die Schaffung einer WKWebView:Hier ist die addUserScriptToUserContentController:
Diese ajaxHandler ist nicht für mich arbeiten. Ich bekomme den Fehler nämlich unbekannte variable $. Irgendwelche Ideen?
Du bist wahrscheinlich nicht importieren jQuery in der Antwort der ursprünglichen Anfrage ($ ist ein JQuery-variable)
angesichts halil_g die Antwort aussieht, es ist nicht unterstützt von WKWebView und muss importiert werden, die in der Reaktion von web-Inhalten.
InformationsquelleAutor Benzi Heler
Wenn Sie die Kontrolle über die Inhalte in den
WkWebView
Sie können Nachrichten senden, um Ihre native app mitwindow.webkit.messageHandlers
Wann immer Sie machen eine ajax-Anforderung, die alsWKScriptMessage
, die verarbeitet werden können, was haben Sie bezeichnet als IhreWKScriptMessageHandler
. Die Nachrichten enthalten kann, was auch immer Informationen, die Sie wollen, und werden automatisch umgewandelt in native Objekte/Werte in Objective-C oder Swift-code.Wenn Sie keine Kontrolle über die Inhalte, die Sie immer noch durch die Injektion von Ihren eigenen JavaScript über eine
WKUserScript
zu verfolgen, ajax-requests und senden wieder Nachrichten mit der Methode oben.Ich habe keine Kontrolle über die Inhalte in den WKWebview. Trotzdem werde ich in der Lage sein, um die ajax-Anfrage?
Sie erwähnten, dass u don ' T haben die Kontrolle über die Inhalte in den WKWebview aber Sie sagen, Sie haben es gelöst die Weise, die Justin Michael vorgeschlagen.... Können Sie bitte erläutern, kann es möglich sein, Sie Sie nicht die Kontrolle über die webview Inhalt?
InformationsquelleAutor Justin Michael
@Benzi Heler Antwort ist toll, aber es jQuery verwendet, was scheint, wie nicht im
WKWebView
mehr, also habe ich Lösung gefunden ohne die Verwendung von jQuery.Hier ist ViewController Umsetzung, mit der Sie benachrichtigt werden, jeden AJAX-request abgeschlossen ist in
WKWebView
:Ziemlich standard-Implementierung. Es ist ein
WKWebView
programmgesteuert erstellt. Es ist injizierte Skript, das geladen wird, vonscript.js
Datei.Und der wichtigste Teil ist
script.js
Datei:userContentController
delegate-Methode wird jedesmal aufgerufen, wenn es AJAX-request geladen. Ich bin nebenbei esstatus
undresponseURL
, denn das war, was ich brauchte, in meinem Fall, aber Sie können auch mehr Informationen über die Anfrage. Hier ist die Liste aller Eigenschaften und Methoden zur Verfügung:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
Meine Lösung ist inspiriert von dieser Antwort geschrieben von @John Culviner:
https://stackoverflow.com/a/27363569/3448282
InformationsquelleAutor user3448282