【小(xiǎo)編推薦】ios中使用(yòng)Ωαwebview

2016-05-30   | ∏π≈  發布者:梁國(guó)芳&nb£δΩ÷sp;  |   查看(kà★βn):3320次

app開(kāi)發
 從(cóng)iOS7開(kāi)始 蘋果公布了(le)JavascriptCore.framework 它使得(de)JS與OC的(de)交互更加方便了(le)‌>§→。

下(xià)面我們就(jiù)簡單了(le)解一(yī)下₩β€(xià)這(zhè)個(gè)框架

首先我導入framework

方法如(rú)下(xià)

 

點擊linked frameworks and Libraries 的(♠γ₩de)添加後 選擇 JavascriptCore.framework

 

選中JavascriptCore.framework後 點擊右下(xià)角Add ®£‍添加完成

好(hǎo) 創建完成之後我們導入一(yī)下(↓✘≠xià)頭文(wén)件(jiàn)

 

[objc] view plain copy
 
  1. #import   

點進去(qù) 會(huì)看(kàn)到(dào)如(rú)下(xià)幾$₩λ個(gè)方法

 

 

 

#import "JSContext.h&qu✘ ot;

#import "JSValue.h"

#import "JSManagedValue.h"

#import "JSVirtualMachine.h"

#import "JSExport.h"


這(zhè)些(xiē)方法我們等會(huì)再細$™≤↓講

 

下(xià)來(lái)我們創建一(yī)個(gè)∏¥☆¥UIWebView  用(yòng)來(l∏ו"ái)測試

 

創建UIWebView

 

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

初始化(huà),添加,打開(kāi)網址

 

 

 

[objc] view plain copy
 
  1. //初始化(huà)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到(dào)當前viewcontroller的(de₽☆∑)view上(shàng)  
  5. [self.view addSubview:myWebView]; &nb$±sp;
  6.   
  7. //網址  
  8. NSString *httpStr=@"https://www.baidu.com"₽γ↑;;  
  9. NSURL *httpUrl=[NSURL URLWithString:httpStr];  π‍↕;
  10. NSURLRequest *httpRequest=[NSURLRe≈✔quest requestWithURL:httpUrl];  
  11. [myWebView loadRequest:httpRequest];  


 

 

 

運行(xíng)效果如(rú)下(xià)

 

 

下(xià)面我們來(lái)實現(xiàn)UIWε♦ebView的(de)幾個(gè)代理(lǐ)≈∑☆™方法

首先我們看(kàn)下(xià)它的(de)代理(lǐ)方法

 

[objc] view plain copy
 
  1. @protocol UIWebViewDelegate&nb♠∞$ sp;  
  2.   
  3. @optional  
  4. - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithReque★£st:(NSURLRequest *)request navigationType:(UIWebViewNavigationTyp♣'≤δe)navigationType;&nbs≠Ωp; 
  5. - (void)webViewDidStartLoad:(UIWebView *)webView;  ™";
  6. - (void)webViewDidFinishLoad:(UIWebView *)webView;&nbs☆φ≠$p; 
  7. - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;  
  8.   
  9. @end  

每個(gè)方法的(de)作(zuò)用αγ(yòng)等會(huì)在帶裡(lǐ)面做(zu♣§$ò)注釋

 

首先我們添加協議(yì)

 

[objc] view plain copy
 
  1. @interface ViewController ¶♣​✘;()  

實現(xiàn)代理(lǐ)方法

 

 

[objc] view plain copy
 
  1. #pragma mark π¥'--webViewDelegate  
  2. -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithεε♠∏Request:(NSURLRequest *)request navigationType:(UIWebViewNavigatio∞≠" nType)navigationType  
  3. {  
  4.     ∏™♦//網頁加載之前會(huì)調用(yòng→•ε‌)此方法  
  5.      &nb★&≥sp;
  6.     //retrun YES 表示'∑→正常加載網頁 返回NO 将停止網頁加≥≤•±載  
  7.    &nbs↓α↑p;return YES;  
  8. }  
  9.   
  10. -(void)webViewDidStartLoad:(UIWebView *)webView  
  11. {  
  12.     //開(kāi)始加載網頁調用(yòng)此方•↓∏&法  
  13. }  
  14.   
  15. -(void)webViewDidFinishLoad:(UIWebView *)webView  
  16. {  
  17.     //網頁加載完成調用(yòng)此方法  
  18. }  
  19.   
  20. -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error  
  21. {  
  22.     //網頁加載失敗 調用(yòng)此方法  
  23. }  


 

每個(gè)方法是(shì)什(shén)麽時(shí)候調用(yòng)都('↕§ dōu)在注釋裡(lǐ)面

下(xià)來(lái)我們先嘗試用(yòn↓ΩΩεg)oc調用(yòng)一(yī)下(xià)js方法

 

[objc] view plain copy
 
  1. -(void)webViewDidFinishLoad:(UIWebView *)webView  
  2. {  
  3.     //網頁加載完成調用(yòng)此方法  
  4.       
  5.     ±φ//首先創建JSContext 對(duì→Ω)象(此處通(tōng)過當前webView的(de)鍵獲取∑✘到(dào)jscontext)  
  6.     JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainframe.javascriptContext"];  
  7.     NSString *alertJS=@"alert('test js OC')"≤ →//準備執行(xíng)的(de)js代碼  
  8.     [cont±÷ext evaluatescript:alertJS];//通(tōng)過oc方法調用(yòng)js的(de)₩§∑∞alert  
  9.     &≤ ↓nbsp; 
  10. }  

執行(xíng)效果如(rú)下(xià):

 

 

 

 

好(hǎo)了(le),我們已經實現(xiàn)了(le)iOS Ωφ™調用(yòng)js