常見問題, 使用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直接調用普通方法一樣,直接調用即可。