標籤: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
- #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
- UIWebView *myWebView;
初始化,添加,開啟網址
[objc] view plain copy
- //初始化webview
- myWebView=[[UIWebView alloc]initWithFrame:CGRectMake(0, 22, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-22)];
- 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:httpRequest];
運行效果如下
下面我們來實現UIWebView的幾個代理方法
首先我們看下它的代理方法
[objc] view plain copy
- @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
每個方法的作用等會在帶裡面做注釋
首先我們添加協議
[objc] view plain copy
- @interface ViewController ()<UIWebViewDelegate>
實現代理方法
[objc] view plain copy
- #pragma mark --webViewDelegate
- -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
- {
- //網頁載入之前會調用此方法
-
- //retrun YES 表示正常載入網頁 返回NO 將停止網頁載入
- return YES;
- }
-
- -(void)webViewDidStartLoad:(UIWebView *)webView
- {
- //開始載入網頁調用此方法
- }
-
- -(void)webViewDidFinishLoad:(UIWebView *)webView
- {
- //網頁載入完成調用此方法
- }
-
- -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
- {
- //網頁載入失敗 調用此方法
- }
每個方法是什麼時候調用都在注釋裡面
下來我們先嘗試用oc調用一下js方法
[objc] view plain copy
- -(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
js調用iOS 在下節
http://blog.csdn.net/lwjok2007/article/details/47058795
轉載 iOS js oc相互調用(JavaScriptCore)