iOS中WebView和JS的互動
阿新 • • 發佈:2019-01-27
從iOS7開始 蘋果公佈了JavaScriptCore.framework 它使得JS與OC的互動更加方便了。
下面我們就簡單瞭解一下這個框架
首先我匯入framework
方法如下
點選Linked Frameworks and Libraries 的新增後 選擇 JavaScriptCore.framework
選中JavaScriptCore.framework後 點選右下角Add 新增完成
好 建立完成之後我們匯入一下標頭檔案
點進去 會看到如下幾個方法
#import "JSContext.h"
#import "JSValue.h"
#import
#import "JSVirtualMachine.h"
#import "JSExport.h"
這些方法我們等會再細講
下來我們建立一個UIWebView 用來測試
建立UIWebView
- UIWebView *myWebView;
初始化,新增,開啟網址
- //初始化webview
-
myWebView=[[UIWebView alloc]initWithFrame:CGRectMake(0, 22, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen
- myWebView.delegate=self;
- //新增webview到當前viewcontroller的view上
- [self.view addSubview:myWebView];
- //網址
- NSString *httpStr=@"https://www.baidu.com";
- NSURL *httpUrl=[NSURL URLWithString:httpStr];
- NSURLRequest *httpRequest=[NSURLRequest requestWithURL:httpUrl];
-
[myWebView loadRequest
執行效果如下
下面我們來實現UIWebView的幾個代理方法
首先我們看下它的代理方法
- @protocol UIWebViewDelegate <NSObject>
- @optional
- - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
- - (void)webViewDidStartLoad:(UIWebView *)webView;
- - (void)webViewDidFinishLoad:(UIWebView *)webView;
- - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;
- @end
每個方法的作用等會在帶裡面做註釋
首先我們新增協議
- @interface ViewController ()<UIWebViewDelegate>
實現代理方法
- #pragma mark --webViewDelegate
- -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
- {
- //網頁載入之前會呼叫此方法
- //retrun YES 表示正常載入網頁 返回NO 將停止網頁載入
- returnYES;
- }
- -(void)webViewDidStartLoad:(UIWebView *)webView
- {
- //開始載入網頁呼叫此方法
- }
- -(void)webViewDidFinishLoad:(UIWebView *)webView
- {
- //網頁載入完成呼叫此方法
- }
- -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
- {
- //網頁載入失敗 呼叫此方法
- }
每個方法是什麼時候呼叫都在註釋裡面
下來我們先嚐試用oc呼叫一下js方法
- -(void)webViewDidFinishLoad:(UIWebView *)webView
- {
- //網頁載入完成呼叫此方法
- //首先建立JSContext 物件(此處通過當前webView的鍵獲取到jscontext)
- JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
- NSString *alertJS=@"alert('test js OC')"; //準備執行的js程式碼
- [context evaluateScript:alertJS];//通過oc方法呼叫js的alert
- }
執行效果如下:
好了,我們已經實現了iOS 呼叫js