1. 程式人生 > >淺談iOS與JS互動

淺談iOS與JS互動

#import <JavaScriptCore/JavaScriptCore.h>

1.iOS呼叫JS function

//  js程式碼中的一個function:

JS_editor.setBold = function() {
    document.execCommand('bold', false, null);
    this.enabledEditingItems();
}


//OC程式碼調動JS的function

- (void)setBold {
    NSString *JS = @"JS_editor.setBold();";
    [self.webView stringByEvaluatingJavaScriptFromString:JS];
}
說明:OC中的webView(UIWebView、WKWebView)有此方法:
stringByEvaluatingJavaScriptFromString: 
可以呼叫js程式碼

2.JS呼叫OC method

//首先OC需要宣告一個method供JS呼叫,宣告方法位置一般選擇在webView的代理方法

webViewDidFinishLoad:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
    JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    context[@"pushAlert"] = ^(){
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"tip" message:@"Code execution success!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
        [alert show];
    };
}


//程式碼中聲明瞭一個名叫“pushAlert”的不帶引數的method,宣告方式同定義block一樣,可傳遞引數...

//接下來就是在JS程式碼中呼叫OC中宣告的“pushAlert”方法.也可自行定義引數,需要注意的是方法名稱必須一致.

JS_editor.setBold = function() {
    document.execCommand('bold', false, null);
    this.enabledEditingItems();
//setBlod()之後回撥OC的方法
    pushAlert();
}