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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM