iOS中js与objective-c的交互
因为在iOS中没有WebKit.Framework这个库的,所以也就没有 windowScriptObject对象方法了。要是有这个的方法的话 就方便多了,(ps:MacOS中有貌似)
现在我们利用其他方法去达到js与objective-c的交互效果。
首先是objective-c调用js中的代码,可以用uiwebview中的一个方法 stringByEvaluatingJavaScriptFromString:后面接的是js中的方法名。这个函数的返回值就是所调用js方法
的返回值。
而在js调用objective-c的方法就没那么简单了,
在js中的代码应该这么做:
function testFunc(cmd,parameter1) { alert(1); document.write(Date()); document.location="objc://"+cmd+":/"+parameter1; //cmd代表objective- c中的的方法名,parameter1自然就是参数了
}
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:
(NSURLRequest*)request navigationType:
(UIWebViewNavigationType)navigationType //这个方法是网页
中的每一个请求都会被触发的 { NSString *urlString = [[request URL] absoluteString];
NSArray *urlComps = [urlString componentsSeparatedByString:@"://"];
if([urlComps count] && [[urlComps objectAtIndex:0] isEqualToString:@"objc"]) {
NSArray *arrFucnameAndParameter = [(NSString*)[urlComps objectAtIndex:1] componentsSeparatedByString:@":/"]; NSString *funcStr = [arrFucnameAndParameter objectAtIndex:0];
if (1 == [arrFucnameAndParameter count]) { // 没有参数 if([funcStr isEqualToString:@"doFunc1"]) {
/*调用本地函数1*/ NSLog(@"doFunc1");
} } else if(2 == [arrFucnameAndParameter count]) { //有参数的 if([funcStr isEqualToString:@"doFunc1"] && [arrFucnameAndParameter objectAtIndex:1]) { /*调用本地函数1*/ NSLog(@"doFunc1:parameter"); } } return NO; }; return YES;
}
stringByEvaluatingJavaScriptFromString:这个弯,用
stringByEvaluatingJavaScriptFromString:函数去掉js的方法,把返回值当做js方法中的参数形式传回去给 js。