2015-06-16 8 views
5

Aufruf Ich weiß, wie nativer IOS schnellen App-Nachricht von JS senden:JS eine Funktion in Swift

func userContentController(userContentController: WKUserContentController!, didReceiveScriptMessage message: WKScriptMessage!) { 

     println("JavaScript is sending a message \(message.body)") 

} 

und JS:

webkit.messageHandlers.callbackHandler.postMessage("Hello from JavaScript"); 

Meine Frage: ist es möglich, eine direkt anrufen Funktion in der nativen App, anstatt die Nachricht in meinem Beispielcode zu erhalten.

sagen, dass ich in der JS wollen, wie etwas zu verwenden: ist, dass ich fragen

webkit.messageHandlers.someFunctionName() 

Der Grund Im Android das ist, wie es

+0

Sie haben eine URL, die Sie richtig verwenden? die js aus der ios app anrufen? –

Antwort

0

arbeitet Sie könnten versuchen, die url parameters zu bedienen, wie würden Sie eine Verbindung zu PHP swift mit

Hier ist ein Beispiel dafür, wie die uRL-Parameter in Javascript zu bekommen: Get url parameter jquery Or How to Get Query String Values In js

Dann, wenn Sie die JavaScript ausführen können Sie überprüfen, in der Prüfung, was die url parameters sind und dann eine Funktion auf diesem

wie diese die URL ist example.com wir verwenden, um die Parameter command, zu sagen, welche Funktion auf Basis laufen laufen

example.com?command=foo 

dann sollten wir sowas wie dies in der Javascript haben

if(command='foo'){ 
    //run function 
    runFoo(); 
} 

die n Sie können auch die URL-Parameter verwenden Parameter eingestellt in die Funktion

Wenn Sie PHP wählen

wenn Sie PHP verwenden, ist dies die gleiche Sache, die Sie mit $_GET['command'];

3

WKWebView tun können unterstützt nur die Raw Message Passing-Schnittstelle. Sie müssen es für komplexe Interaktionen zwischen JS und nativ umbrechen.

Ich habe ein Projekt mit dem Namen XWebView erstellt, das basierend auf der Raw Message Passing-Funktion von WKWebView eine API mit Sprachbindung bietet. Es ist in Swift geschrieben.

Zum Beispiel können Sie ein Plugin in Swift schreiben:

class Plugin : NSObject { 
    func someFunctionName() { 
     doSomeThing() 
    } 
} 

Expose eine Instanz des Plugins JavaScript vor dem Laden HTML:

let webView = WKWebView(frame: frame, configuration: WKWebViewConfiguration()) 
webView.loadPlugin(Plugin(), namespace: "foo") 

Rufen Sie die Funktion von JavaScript:

window.foo.someFunctionName() 

Es ist wirklich einfach und unkompliziert. Weitere Informationen finden Sie auf der Projektseite.