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自然就是参数了

}

而在objective-c中,也是利用uiwebview的一个方法,

- (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;

}

这个方法是可以达到js调用本地objective-c的方法,可惜没办法把返回值返回给js,所以还是要绕过

stringByEvaluatingJavaScriptFromString:这个弯,用

stringByEvaluatingJavaScriptFromString:函数去掉js的方法,把返回值当做js方法中的参数形式传回去给

js。