1. 程式人生 > >iOS js oc相互呼叫(JavaScriptCore)

iOS js oc相互呼叫(JavaScriptCore)

從iOS7開始 蘋果公佈了JavaScriptCore.framework 它使得JS與OC的互動更加方便了。

下面我們就簡單瞭解一下這個框架

首先我匯入framework

方法如下

點選Linked Frameworks and Libraries 的新增後 選擇 JavaScriptCore.framework

選中JavaScriptCore.framework後 點選右下角Add 新增完成

好 建立完成之後我們匯入一下標頭檔案

  1. #import <JavaScriptCore/JavaScriptCore.h>

點進去 會看到如下幾個方法

#import "JSContext.h"

#import "JSValue.h"

#import "JSManagedValue.h"

#import "JSVirtualMachine.h"

#import "JSExport.h"


這些方法我們等會再細講

下來我們建立一個UIWebView  用來測試

建立UIWebView

  1. UIWebView *myWebView;  

初始化,新增,開啟網址
  1. //初始化webview
  2. myWebView=[[UIWebView alloc]initWithFrame:CGRectMake(022, [UIScreen
     mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-22)];  
  3. myWebView.delegate=self;  
  4. //新增webview到當前viewcontroller的view上
  5. [self.view addSubview:myWebView];  
  6. //網址
  7. NSString *httpStr=@"https://www.baidu.com";  
  8. NSURL *httpUrl=[NSURL URLWithString:httpStr];  
  9. NSURLRequest *httpRequest=[NSURLRequest
     requestWithURL:httpUrl];  
  10. [myWebView loadRequest:httpRequest];  


執行效果如下

下面我們來實現UIWebView的幾個代理方法

首先我們看下它的代理方法

  1. @protocol UIWebViewDelegate <NSObject>  
  2. @optional
  3. - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;  
  4. - (void)webViewDidStartLoad:(UIWebView *)webView;  
  5. - (void)webViewDidFinishLoad:(UIWebView *)webView;  
  6. - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;  
  7. @end

每個方法的作用等會在帶裡面做註釋

首先我們新增協議

  1. @interface ViewController ()<UIWebViewDelegate>  

實現代理方法
  1. #pragma mark --webViewDelegate
  2. -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType  
  3. {  
  4.     //網頁載入之前會呼叫此方法
  5.     //retrun YES 表示正常載入網頁 返回NO 將停止網頁載入
  6.     returnYES;  
  7. }  
  8. -(void)webViewDidStartLoad:(UIWebView *)webView  
  9. {  
  10.     //開始載入網頁呼叫此方法
  11. }  
  12. -(void)webViewDidFinishLoad:(UIWebView *)webView  
  13. {  
  14.     //網頁載入完成呼叫此方法
  15. }  
  16. -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error  
  17. {  
  18.     //網頁載入失敗 呼叫此方法
  19. }  


每個方法是什麼時候呼叫都在註釋裡面

下來我們先嚐試用oc呼叫一下js方法

  1. -(void)webViewDidFinishLoad:(UIWebView *)webView  
  2. {  
  3.     //網頁載入完成呼叫此方法
  4.     //首先建立JSContext 物件(此處通過當前webView的鍵獲取到jscontext)
  5.     JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];  
  6.     NSString *alertJS=@"alert('test js OC')"//準備執行的js程式碼
  7.     [context evaluateScript:alertJS];//通過oc方法呼叫js的alert
  8. }  

執行效果如下:

好了,我們已經實現了iOS 呼叫js