iOS 中JS與OC(UIWebView)的交互

項目開發(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容