Rufen Sie swift-Funktion von java Skript, liefert einen Wert mit wk webview
Möchte ich nennen, eine swift-Funktion von java-script-code gibt die device id
zurück an das Skript, ich hatte den code Hinzugefügt, dass die Nutzung derzeit. Bitte beraten, wie Sie den Rückgabewert zurück an den java script
aus dem swift-Funktion, Dank im Voraus
Code-Snippet :
super.viewDidLoad()
{
self.webView = WKWebView()
let preferences = WKPreferences()
preferences.javaScriptEnabled = true
let configuration = WKWebViewConfiguration()
configuration.preferences = preferences
configuration.userContentController = contentController
configuration.userContentController.addScriptMessageHandler(self,name: "interOp")
self.webView = WKWebView(frame: self.view.frame, configuration: configuration)
print(self.view.frame)
self.view = self.webView
webView!.navigationDelegate = self
let url = NSURL(string:"http://softence.com/devTest/vb_ios.html")
let req = NSURLRequest(URL:url!)
self.webView!.loadRequest(req)
}
//did receivescript message is working fine
func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage)
{
let sentData = message.body as! NSDictionary
print(sentData)
if sentData["name"] as! String == "DeviceInfo"
{
self.DeviceInfo()
}
}
//i want to return the following device info to javascript
func DeviceInfo() -> String
{
let dict = NSMutableDictionary()
dict.setValue(UIDevice.currentDevice().model, forKey: "model")
dict.setValue(UIDevice.currentDevice().name, forKey: "name")
dict.setValue(UIDevice.currentDevice().systemVersion, forKey: "system_version")
return String(dict)
}
- FYI JavaScript ist ein Wort... 😉
- Sie können dieser beantworten, falls Sie bekam es in synchroner Art und Weise.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, einen Blick auf die
evaluateJavaScript(_:, completionHandler:)
Funktion aufWKWebView
wie beschrieben hierVerwenden, dass Ihre
DeviceInfo
Funktion definieren sollte die komplette JavaScript-string, die Sie ausführen möchten.So zum Beispiel, wenn Sie hatte eine JavaScript-Funktion definiert, etwa so:
Dann Ihre
DeviceInfo
- Funktion könnte etwa so Aussehen:Könnten Sie auch zurück
javaScriptString
von IhremDeviceInfo
Funktion und rufen Sie dann, es in IhremuserContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage)
, die wichtigen Dinge sind:evaluateJavaScript
Hoffe das hilft dir.
didReceiveScriptMessage
. Wieder ruftdeviceInfo()
generiert ein JavaScript-string, der ruft die JavaScript-Funktion, gefüllt mit den richtigen Daten. Oder bin ich Missverständnis, was du meinst? Hoffe, ich mache SinnWKUserContentController
als eine Art Brücke zwischen Ihrem JavaScript-code und native code, wie hast du Sie in deinem Beispiel oben. Sobald Sie den Anrufwindow.webkit.messageHandlers.interOp.postMessage(someDataHere);
erkannt wird, durch IhreWKUserContentController
unddidReceiveScriptMessage
genannt wird, gibt Ihnen die Möglichkeit, um genau herauszufinden, welche JavaScript-Funktion aufgerufen wurde. Zum senden von Daten in die andere Richtung, können Sie die Methode, die ich versucht habe zu beschreiben, vorWKWebView
. So zum Beispiel, wenn Sie möchten, um alle<h1>
tags gelb in Ihrer app (für einige ungerade Grund!), könnten Sie ein Skript, das dies tun würde, und dann zu injizieren, die in IhremWKWebView
irgendwann. Man kann die Beschreibung sehen Sie hier: developer.apple.com/reference/webkit/wkuserscript ich habe nicht verwendet, obwohl dies, aber vielleicht kann es dir helfen.