項目開發(fā)中,會推一些活動供用戶參加,活動頁面一般都是用h5或者web頁面,這活動頁面有時候需要跟移動端有交互操作,比如點了一個鏈接或者button,跳轉(zhuǎn)到app內(nèi)的某個頁面。那么這個時候就需要移動端交互來完成了。
UIWebView是可以捕獲當前頁面要去加載的url地址,比如當你點擊了頁面的一個超鏈接,或者一個圖片類型的標簽連接,又或者是點擊頁面的中的button(在點擊方法里去加載指定的url)。那么當前的UIWebView就會去加載這個url地址,此時我們可以通過UIWebView的代理方法去攔截這個url。
具體代碼如下(UIWebViewDelegate):
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
//判斷是否是單擊
if (navigationType == UIWebViewNavigationTypeLinkClicked)
{
? NSURL *url = [request URL];
? NSLog(@"----url:%@",[url absoluteString]);
//當你單擊頁面上的超鏈接或者button,去加載url時,是可以在這個代理方法里面攔截到url地址的
//既然能夠拿到,那么就可以跟寫這個web頁面或者h5的同事,約定一個url
//比如你的url是:http://www.huodong
? if([[url absoluteString] isEqualToString:@"http://www.huodong"]){
??? //如果是你們約定的url,那么就可以在執(zhí)行你要調(diào)轉(zhuǎn)的方法
??? return NO;//(NO,表示不去加載這個url地址)
? }else{
??? //如果不是,那么就去加載我們的不需要跳轉(zhuǎn)的url連接地址
??? return YES;
? }
}
return YES;
}
還有另外一種方法也可實現(xiàn)js跟oc的交互(使用了本地的一個html測試),這個需要導入JavaScriptCore.framework
在viewDidLoad方法里
mywebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[mywebView setDelegate:self];
NSString *path = [[NSBundle mainBundle] pathForResource:@"huodong" ofType:@"html"];
NSString *htmlString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSString *basePath = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:basePath];
[mywebView loadHTMLString:htmlString baseURL:baseURL];
JSContext *context=[mywebView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//注意這個jump方法就是html中點擊button后要執(zhí)行的方法,
/*
document.getElementById('button').onclick = function(){
window.jump(12);
}
*/
//html中回去掉jump這個方法,并講12這個整形參數(shù)傳遞過來,這個是可以傳多參數(shù)的
context[@"jump"] = ^() {
NSArray *args = [JSContext currentArguments];
for (id obj in args) {
NSLog(@"%@",obj);
}
};
可以參考下面這個博客
iOS js oc相互調(diào)用(JavaScriptCore)(二)
http://blog.csdn.net/lwjok2007/article/details/47058795
IOS開發(fā)—JS調(diào)用OC(通過非URL的方式)
http://www.itdecent.cn/p/df76cc7a395d
iOS js與oc交互(js調(diào)用oc篇)
http://www.itdecent.cn/p/4099d9634810