轉載 iOS js oc相互調用(JavaScriptCore)

來源:互聯網
上載者:User

標籤:art   nsstring   ext   sso   ini   screen   測試   http   get   

 iOS js oc相互調用(JavaScriptCore) 

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

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

首先我匯入framework

方法如下

 

點擊Linked Frameworks and Libraries 的添加後 選擇 JavaScriptCore.framework

 

選中JavaScriptCore.framework後 點擊右下角Add 添加完成

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

 

[objc] view plain copy 
  1. #import <JavaScriptCore/JavaScriptCore.h>  

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

 

 

 

#import "JSContext.h"

#import "JSValue.h"

#import "JSManagedValue.h"

#import "JSVirtualMachine.h"

#import "JSExport.h"


這些方法我們等會再細講

 

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

 

建立UIWebView

 

[objc] view plain copy 
  1. UIWebView *myWebView;  

初始化,添加,開啟網址

 

 

 

[objc] view plain copy 
  1. //初始化webview  
  2. myWebView=[[UIWebView alloc]initWithFrame:CGRectMake(0, 22, [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. //網址  
  8. NSString *httpStr=@"https://www.baidu.com";  
  9. NSURL *httpUrl=[NSURL URLWithString:httpStr];  
  10. NSURLRequest *httpRequest=[NSURLRequest requestWithURL:httpUrl];  
  11. [myWebView loadRequest:httpRequest];  


 

 

 

運行效果如下

 

 

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

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

 

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

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

 

首先我們添加協議

 

[objc] view plain copy 
  1. @interface ViewController ()<UIWebViewDelegate>  

實現代理方法

 

 

[objc] view plain copy 
  1. #pragma mark --webViewDelegate  
  2. -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType  
  3. {  
  4.     //網頁載入之前會調用此方法  
  5.       
  6.     //retrun YES 表示正常載入網頁 返回NO 將停止網頁載入  
  7.     return YES;  
  8. }  
  9.   
  10. -(void)webViewDidStartLoad:(UIWebView *)webView  
  11. {  
  12.     //開始載入網頁調用此方法  
  13. }  
  14.   
  15. -(void)webViewDidFinishLoad:(UIWebView *)webView  
  16. {  
  17.     //網頁載入完成調用此方法  
  18. }  
  19.   
  20. -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error  
  21. {  
  22.     //網頁載入失敗 調用此方法  
  23. }  


 

每個方法是什麼時候調用都在注釋裡面

下來我們先嘗試用oc調用一下js方法

 

[objc] view plain copy 
  1. -(void)webViewDidFinishLoad:(UIWebView *)webView  
  2. {  
  3.     //網頁載入完成調用此方法  
  4.       
  5.     //首先建立JSContext 對象(此處通過當前webView的鍵擷取到jscontext)  
  6.     JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];  
  7.     NSString *alertJS=@"alert(‘test js OC‘)"; //準備執行的js代碼  
  8.     [context evaluateScript:alertJS];//通過oc方法調用js的alert  
  9.       
  10. }  

執行效果如下:

 

 

 

 

好了,我們已經實現了iOS 調用js

 

js調用iOS 在下節

http://blog.csdn.net/lwjok2007/article/details/47058795

轉載 iOS js oc相互調用(JavaScriptCore)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.