常见问题, 使用webView时, 常常需要调用Objective c的方法。
两种方式可以完成需求, 简单记录方便日后常看。
第一种是网页js调用方法loadURL();
例如:
网页端:
loadURL("myWebView://callfunc?param1=1¶m2=2.......");
iOS端:webView代理
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *url = [[request URL].absoluteString stringByRemovingPercentEncoding];
NSLog(@"%@", url);
if ([url hasPrefix:@"myWebView:"]) {
//调用网页,弹出窗口
[webView stringByEvaluatingJavaScriptFromString:@"alert(1);"];
}
return YES;
}
第二种方法
在iOS代码处获取javaScriptContext, 得到上下文。
具体代码:
iOS端:webView代理
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
context[@"test1"] = ^ NSString *() {
NSArray *args = [JSContext currentArguments];
for (id obj in args) {
NSLog(@"%@",obj);
}
return @"123";
};
}
此处, 申明一个方法名为test1的方法。
网页端, js直接调用普通方法一样,直接调用即可。