2017-12-06 8 views
0

Ich mag Javascript/JSContext in einem iOS-Objective-C webview App verwenden, um einen Wert zu einer Javascript-Funktion zurückzukehren.Ist es möglich, eine Objective-C-Funktion aufzurufen, die einen Wert an Javascript zurückgibt?

Zum Beispiel in javascript: var retVal = myObjC.returnSomething();

wo returnSomething die Objective-C-Funktion ist. Lassen Sie uns aus Gründen der Diskussion sagen, dass es eine Zeichenfolge an die JavaScript-Funktion zurückgibt.

Ich habe in der Lage gewesen, Objective-C-Funktionen aufrufen, die nicht über einen Wert zurückgeben, aber nicht in der Lage, etwas zu finden, das beschreibt, wie ein Wert zurückzukehren.

Ist dies überhaupt möglich mit Javascript, oder bin ich den falschen Ansatz dazu zu nehmen? Ich brauche das Javascript, um auf den Rückgabewert (synchron) zu warten.

Antwort

2

Wie Sie erwarten, Datenweitergabe von obj C zu JS verwenden stringByEvaluatingJavaScriptFromString/Übergabe von Daten von JS Obj C verwenden JSContext

<!-- save as .html and load into UIWebview --> 

    <!DOCTYPE html> 
    <html> 
    <head> 
    <script> 
    function loadData(x){ 
    alert(x); 
    }  
    function myMeg(){ 
    passDatatoObjC("success");  
    } 
    </script> 
    </head> 
    </html> 

    function returnSomething(x){ 
    loadData(x); 
    } 

    function passDatatoObjC(x){ 
    passDatatoObjC(x);  
    } 

    #pragma mark - UIWebview dataource 

    -(void)webViewDidFinishLoad:(UIWebView *)webView{ 

     [self.svgWebMapView stringByEvaluatingJavaScriptFromString:@"returnSomething(10)"]; 

     JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; 
    context[@"passDatatoObjC"] = ^(NSString *msg) { 
    NSLog(@"%@",msg); 

    }); 
    } 
+0

Ja, ich gebe auf und wird nur gehen mit 'stringByEvaluatingJavaScriptFromString 'und ändere das Javascript, um es anzupassen. Ziemlich frustrierend. Vielen Dank für Ihre Antwort. – Dave

Verwandte Themen