JS和OC交互有好几种方法,这种引用EasyJSWebView第三方的,是和安卓最像的,调用的JS也是一样的,避免H5开发的写两次JS了
但是,有问题,再次加载的时候,点击页面,EasyJSWebView的代理方法不走了。这个第三方里面的代理还拿不出,so我想了一个本办法,就是在webview加载的时候,把旧的webview去掉,重新铺一个新的
上代码
@property (nonatomic, strong)EasyJSWebView *webview;
static BOOL first=YES;//定义一个静态变量,判断是否是第二次加载
-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
if (!first) {
[_mWebV removeFromSuperview];
_mWebV = nil;
__weak typeof(self) _weakself = self;
_webview = [[EasyJSWebView alloc] initWithFrame:CGRectMake(0, 20, _weakself.view.frame.size.width, _weakself.view.frame.size.height)];
[self.view addSubview:_webview];
_webview.backgroundColor = [UIColor lightGrayColor];
_webview.delegate = self;
[_webview addJavascriptInterfaces:self WithName:@"test"];
[_webview loadRequest:request];
NSLog(@"重新刷新");
first = YES;
return NO;
}
first = NO;
return YES;
}
之所以定义全局的webview,是因为代理方法里,是需要逻辑编码或者页面跳转之类的