从iOS7开始 苹果公布了JavaScriptCore.framework,使得JS与OC的交互更加方便.
首先导入JavaScriptCore.framework框架.
点击 Linked Frameworks and Libraries 的添加后 选择 JavaScriptCore.framework,选中JavaScriptCore.framework后 点击右下角Add 添加完成,创建一个UIWebView 用来测试.
/* 测试代码如下 */
#import "ViewController.h"
#import <JavaScriptCore/JavaScriptCore.h>
#define KSCREENSIZE [UIScreen mainScreen].bounds.size
@interface ViewController ()<UIWebViewDelegate>
@property(nonatomic,weak) UIWebView *testWebView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 初始化webView
UIWebView *testWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, KSCREENSIZE.width, KSCREENSIZE.height)];
// 添加webView到当前的viewController的view上
[self.view addSubview:testWebView];
self.testWebView = testWebView;
testWebView.delegate = self;
// 网址
NSString *httpStr = @"https://www.baidu.com";
NSURL *httpUrl = [NSURL URLWithString:httpStr];
NSURLRequest *httpRequest = [NSURLRequest requestWithURL:httpUrl];
[testWebView loadRequest:httpRequest];
}
#pragma mark - UIWebView的代理方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
// 网页加载之前会调用这个方法
// return YES 表示正常加载网页 返回 NO 将停止加载网页
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView{
// 开始加载网页时调用
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
// 网页加载完成时调用
// MARK: - OC调用JS
// 首先创建JSContext 对象 (此处通过当前webView的键获取到就是从jscontext)
JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
// 准备执行的js代码
NSString *alertJS = @"alert('Warning')";
// 通过OC方法调用js的alert
[context evaluateScript:alertJS];
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
// 网页加载失败 会调用
}
/* 运行效果如下 */
END