一 objc与javaScript交互
1).传统的与JS交互的方式有导入PhoneGap,但这里讨论的是通过拦截URL的方式来交互。
objc向JS传参的方式比较简单:
NSString *jsCode = [NSString stringWithFormat:@"%@(%@)",callbackMethod,paramString];
[webview stringByEvaluatingJavaScriptFromString:jsCode];
其中callbackMethod是JS端方法名,paramString是要传的参数名。
2).JS调用objc的方式采用拦截URL;比如在点击webview上按钮时,调用 iOS buttonClick方法。
如下方法的作用是当点击按钮时,JS返回一个“#ios|buttoncolick|param|”(格式根据自己需要自定义)的RURL,shouldStartLoadWithRequest捕捉到并做相应的处理,并返回NO,否则返回YES进行web view页面加载。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *requestString = [[request URL] absoluteString];
NSInteger Meathodindex = [requestString rangeOfString:@"#ios"].location;
NSArray *compents = [requestString componentsSeparatedByString:@"#ios:"];
if (Meathodindex != NSNotFound)
{
//poctol是方法名和参数以及方法ID的集合,用|分割
NSString *poctol = [((NSString*)[compents objectAtIndex:1]) stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSArray *detailMethod = [poctol componentsSeparatedByString:@"|"];
//方法名
self.callbackMethod = [detailMethod objectAtIndex:detailMethod.count-2];
NSString *selecorName = [detailMethod objectAtIndex:0];
if([selecorName isEqualToString:@"buttonClick"])
{
[self showHudView];
}
return NO;
}
return YES;
}
二 webview的goback和goForward的使用
很简单,废话不多说
-(void)webViewDidStartLoad:(UIWebView *)webView
{
[self changeBtnState];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[self changeBtnState];
- (void)changeBtnState
{
NSLog(@"xxxx:%d",[self.web canGoBack]);
self.btnBack.enabled = [self.web canGoBack];
self.btnForward.enabled = [self.web canGoForward];
}
这个有一个问题就是第一次加载页面跳到第二个页面的时候不能goback,cangoback返回的结果一直是NO,后在satckOverflower上看到帖子说是IOS7.1的BUG,在6.0上运行良好,试了下果然如此http://stackoverflow.com/questions/18948373/why-is-uiwebview-cangoback-no-in-ios7