JS代碼和OC代碼的相互調用,js代碼oc

來源:互聯網
上載者:User

JS代碼和OC代碼的相互調用,js代碼oc

JS調用OC

很多應用裡面或多或少的調用了網頁,來達到絢麗的效果,所謂的JS調用OC.....舉個例子吧,網頁上有個按鈕

點擊按鈕跳轉介面,跳轉的動作由OC的代碼實現。

OC調用JS

還是舉個例子,我們OC代碼建立了輸入框比如輸入使用者名稱,輸入完成後顯示在網頁上,顯示使用者的使用者名稱

一.利用webView的代理方法實現OC和JS的相互調用

建立屬性

@property(nonatomic,strong)UIWebView * webView;

遵守webView的協議UIWebViewDelegate

-(void)webViewLoad{        NSURL * url = [[NSURL alloc]initWithString:@"http://www.baidu.com"];    self.webView = [[UIWebView alloc]initWithFrame:self.view.bounds];    NSURLRequest * request = [[NSURLRequest alloc]initWithURL:url];    self.webView.delegate = self;    [self.webView loadRequest:request];        [self.view addSubview:self.webView];    }//JS調用OC-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{    NSString * str = request.URL.relativeString;    if ([str isEqualToString:@"http://www.baidu.com/"]) {       NSLog(@"來找度娘");    }    return YES;}//OC調用JS-(void)webViewDidFinishLoad:(UIWebView *)webView{   NSString * str = [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(""\"index-kw""\").value=""\"li""\""];    NSLog(@"webViewDidFinishLoad=%@",str);    }

二.利用第三方的架構實現(需要你和html端的人統一方法的名稱)

-(void)webViewBridge{    self.webView = [[UIWebView alloc]initWithFrame:[UIScreen mainScreen].bounds];        NSString * path = [[NSBundle mainBundle]pathForResource:@"ExampleApp.html" ofType:nil];    NSURL * url = [[NSURL alloc]initFileURLWithPath:path];        [self.webView loadRequest:[NSURLRequest requestWithURL:url]];    self.webView.delegate = self;    [self.view addSubview:self.webView];    //設定能夠橋接    [WebViewJavascriptBridge enableLogging];    //設定橋接     self.bridge  =   [WebViewJavascriptBridge bridgeForWebView:self.webView];    //設定代理    [self.bridge setWebViewDelegate:self];    //JS調用OC(testObjcCallback是和html統一的方法名字)    [self.bridge registerHandler:@"testObjcCallback" handler:^(id data, WVJBResponseCallback responseCallback) {        NSLog(@"按鈕點擊了");        self.view.backgroundColor= [UIColor blackColor];        responseCallback(@"按鈕點擊了");    }];        }//OC調用JS-(void)webViewDidFinishLoad:(UIWebView *)webView{    NSLog(@"webViewDidFinishLoad");    [self.bridge callHandler:@"registerHandler"];}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.