有時候開發 iOS App 時,因為某些考量,會讓整個頁面使用 HTML 頁面,而不是使用原生的 iOS 畫面,但是此 HTML 頁面又必須與原生的 code 互動。例如:我們現在有一個會員註冊頁面使用 HTML 頁面,當註冊成功時,必須通知 App 跳轉頁面,這時我們可以讓 HTML 頁面在註冊成功時,呼叫一個叫做 RegisterOK() 的 JavaScript 函數,當這個函數被調用時,我們呼叫一個 Objective-C 函數或是方法,然後開啟其他的 iOS 頁面,這時可以這麼做:
先包含 JavaScriptCore.h
標頭檔:
#import <JavaScriptCore/JavaScriptCore.h>
使用 JavaScriptCore 跟 UIWebView 互動:
#pragma mark - UIWebView Delegate
//...
- (void) webViewDidFinishLoad:(UIWebView *)webView {
// 透過 KVC 取得 JavaScriptContext
JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
context[@"RegisterOK"]= ^() {
NSLog(@"Call RegisterOK()");
// 執行一些動作,例如跳轉頁面:
//...
};
}