亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS和JS交互教程之WKWebView-協議攔截詳解

2019-10-21 18:39:38
字體:
來源:轉載
供稿:網友

前言

由于Xcode8發布之后,編譯器開始不支持iOS 7了,這樣我們的app也改為最低支持iOS 8.0,既然需要與web交互,那自然也就選擇使用了 iOS 8.0之后 才推出的新控件 WKWebView.

相比與 UIWebView, WKWebView 存在很多優勢:

  • 支持更多的HTML5的特性
  • 高達60fps滾動刷新頻率與內置手勢
  • 與Safari相容的JavaScript引擎
  • 在性能、穩定性方面有很大提升占用內存更少 協議方法及功能都更細致
  • 可獲取加載進度等。

先解釋下標題:“iOS與JS交互”。iOS指iOS原生代碼(文章只有OC示例),JS指WEB前端(不單指JavaScript),交互指JS調用iOS和iOS調用JS。

本文介紹通過 WKWebView協議攔截的方式實現iOS與JS交互。

WKWebView是Apple在iOS8推出的Webkit框架中的負責網頁的渲染與展示的類,相比UIWebView速度更快,占用內存更少,支持更多的HTML特性。

一、JS調用iOS:

實現邏輯:點擊JS的登錄按鈕,JS將登錄成功后的token數據傳遞給iOS,iOS將收到的數據展示出來。

實現效果:

iOS,JS,交互,WKWebView,協議攔截
JS調用iOS實現效果

JS代碼:

//! 登錄按鈕<button onclick = "login()" style = "font-size: 18px;">登錄</button>
//! 登錄function login() { var token = "js_tokenString"; loginSucceed(token);}//! 登錄成功function loginSucceed(token) { var action = "loginSucceed"; jsToOc(action, token);}//! JS調用OC入口function jsToOc(action, params) { var url = "jsToOc://" + action + "?" + params; loadURL(url);}//! 加載URLfunction loadURL(url) { window.location.href = url;}

iOS代碼:

#pragma mark - WKNavigationDelegate//! WKWeView在每次加載請求前會調用此方法來確認是否進行請求跳轉- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {    if ([navigationAction.request.URL.scheme caseInsensitiveCompare:@"jsToOc"] == NSOrderedSame) {    [WKWebViewInterceptController showAlertWithTitle:navigationAction.request.URL.host message:navigationAction.request.URL.query cancelHandler:nil];    decisionHandler(WKNavigationActionPolicyCancel);  }  else {    decisionHandler(WKNavigationActionPolicyAllow);  }}

實現原理:

1、JS與iOS約定好jsToOc協議,用作JS在調用iOS時url的scheme;

2、JS在登錄成功后加載含有token數據的url: (jsToOc://loginSucceed?js_tokenString);

3、iOS的WKWebView在請求跳轉前會調用-webView:decidePolicyForNavigationAction:decisionHandler:方法來確認是否允許跳轉;

4、iOS在此方法內截取jsToOc協議獲取JS傳過來的數據,用UIAlertController顯示出來,并通過decisionHandler不允許此請求跳轉。

PS1:除了顯示截取到的數據,iOS還可以將navigationAction.request.URL.host看作JS想調用的方法名,將navigationAction.request.URL.query看作該方法的參數集,從而體現出JS調用iOS的概念。
PS2:在-webView:decidePolicyForNavigationAction:decisionHandler:方法中一定要調用decisionHandler回調來制定允許請求跳轉WKNavigationActionPolicyAllow或者不允許跳轉WKNavigationActionPolicyAllow,不然會崩潰。

二、iOS調用JS:

實現邏輯:點擊iOS的登錄按鈕,iOS將登錄成功后的token數據傳遞給JS,JS將收到的數據展示出來。

實現效果:

iOS,JS,交互,WKWebView,協議攔截
iOS調用JS實現效果

iOS代碼:

//! 登錄按鈕UIBarButtonItem *loginBtnItem = [[UIBarButtonItem alloc] initWithTitle:@"登錄" style:UIBarButtonItemStylePlain target:self action:@selector(login:)];self.navigationItem.rightBarButtonItems = @[loginBtnItem];
//! 登錄方法- (void)login:(id)sender {    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{    [self.webView evaluateJavaScript:@"ocToJs('loginSucceed', 'oc_tokenString')" completionHandler:^(id response, NSError *error) {}];  });}

JS代碼:

//! iOS調用JS入口function ocToJs(action, params) { document.getElementById("returnValue").innerHTML = action + '?' + params;}
//! iOS調用JS數據顯示框<div id = "returnValue" style = "font-size: 18px; border: 1px dotted; height: 50px;"> </div>

實現原理:

1、iOS與JS約定好ocToJs方法,用作iOS在調用JS時的入口方法;

2、iOS在登錄成功后以loginSucceed和oc_tokenString為參數拼接JS代碼ocToJs('loginSucceed', 'oc_tokenString');

3、iOS使用WKWebView的-evaluateJavaScript:completionHandler:方法執行拼接好的JS代碼;

3、JS在ocToJs方法中將iOS傳過來的數據顯示在div元素中;

4、iOS通過completionHandler收到JS中ocToJs方法的回調。

PS:WKWebView的-evaluateJavaScript:completionHandler:方法可以執行JS代碼。但只有在整個webView加載完成之后調用此方法才會有響應。比如:我們可以通過如下方式獲取JS的標題。

//! WKWebView在每次加載請求完成后會調用此方法- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {    [webView evaluateJavaScript:@"document.title" completionHandler:^(NSString *title, NSError *error) {    self.title = title;  }];}

可從QiShare的Github獲取工程源碼

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区福利视频| 一区二区三区视频免费在线观看| 亚洲深夜福利网站| 成人精品视频在线| 日本午夜人人精品| 91久久国产婷婷一区二区| 中文字幕v亚洲ⅴv天堂| 国产精品电影在线观看| 欧美肥老太性生活视频| 国产精品一区二区久久| 国色天香2019中文字幕在线观看| 久久成人av网站| 97精品欧美一区二区三区| 91精品久久久久久久久久久| www.日本久久久久com.| 国产精品视频中文字幕91| 青青草原成人在线视频| 亚洲精品720p| 91天堂在线观看| 91sa在线看| 这里只有精品丝袜| 国产一区二区三区毛片| 亚洲成人av资源网| 欧美专区在线视频| 亚洲第一免费网站| 国产成人精品a视频一区www| 欧美一区二区影院| 亚洲精品国产精品乱码不99按摩| 国产精品高清在线| 97精品久久久中文字幕免费| 91理论片午午论夜理片久久| 最好看的2019的中文字幕视频| 亚洲第一区在线| 亚洲精品国产精品国自产观看浪潮| 日韩中文字幕网站| 亚洲天堂av高清| 色偷偷88888欧美精品久久久| 久久精品国产亚洲精品| 久久久久久久成人| yellow中文字幕久久| 精品人伦一区二区三区蜜桃免费| 日韩精品在线视频观看| 国产精品丝袜高跟| 国产精品一区二区三| 亚洲免费人成在线视频观看| 亚洲最新在线视频| 亚洲一区二区三区sesese| 成人444kkkk在线观看| 欧美日韩国产丝袜另类| 免费不卡欧美自拍视频| 欧美老女人性生活| 91久久久精品| 91高清在线免费观看| 国产97在线观看| 国产欧美日韩免费看aⅴ视频| 国产精品亚洲综合天堂夜夜| 精品国产31久久久久久| 88国产精品欧美一区二区三区| 欧美在线日韩在线| 亚洲男人第一av网站| 色中色综合影院手机版在线观看| 最新亚洲国产精品| 91产国在线观看动作片喷水| 91青草视频久久| 亚洲国产高潮在线观看| 欧美综合在线观看| 欧美精品免费在线| 国产精品人成电影| 俺也去精品视频在线观看| 日韩av一卡二卡| 欧美日韩在线一区| 欧美日韩激情网| 亚洲精品永久免费| 日韩电影中文字幕| 日本高清不卡的在线| 久久这里只有精品99| 久久久久久尹人网香蕉| 日韩综合中文字幕| 91老司机在线| 777午夜精品福利在线观看| 精品国产一区二区三区久久狼黑人| 国产精品露脸av在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 中文字幕久久精品| 国产精品丝袜久久久久久高清| 97国产真实伦对白精彩视频8| 国产区精品视频| 一区二区三区四区视频| 久久久精品一区二区| 久久久99久久精品女同性| 亚洲va欧美va国产综合剧情| 国产精品久久久久av免费| 久久久国产精彩视频美女艺术照福利| 亚洲男人天堂九九视频| 国产激情视频一区| 欧美一区二区三区……| 亚洲人成电影网站| 国产精品96久久久久久| 91精品91久久久久久| 欧美专区在线播放| 色妞欧美日韩在线| 亚洲精品视频在线播放| 91青草视频久久| 精品欧美激情精品一区| 久久天天躁狠狠躁夜夜av| 国产精品久久久久av| 91精品国产自产在线观看永久| 美女啪啪无遮挡免费久久网站| 成人黄色av免费在线观看| 全色精品综合影院| 亚洲成人教育av| 欧美在线视频免费观看| 亚洲人线精品午夜| 日韩电影网在线| 中文字幕日本精品| 国产精品视频免费观看www| 国产日韩av在线播放| 亚洲欧美精品一区二区| 九九久久久久久久久激情| 福利二区91精品bt7086| 日韩精品福利在线| 亚洲国产精品视频在线观看| 亚洲色图国产精品| 亚洲国产精品视频在线观看| 日本一本a高清免费不卡| 亚洲欧美中文字幕| 日韩电影中文字幕在线观看| 日韩av影视在线| 久久精品成人欧美大片| 日本欧美爱爱爱| 欧美小视频在线| 国产美女精品视频免费观看| 日韩人体视频一二区| 97视频在线看| 成人激情电影一区二区| 91欧美精品成人综合在线观看| 日韩中文字幕亚洲| 国产91免费观看| 欧美另类交人妖| 欧美高跟鞋交xxxxhd| 亚洲国产成人精品久久久国产成人一区| 91精品国产91久久久久福利| 久久久久国产精品www| 国产日韩精品电影| 亚洲欧美制服丝袜| 日韩69视频在线观看| 亚洲第一区中文99精品| 久久精品影视伊人网| 国产成人极品视频| 国产精品激情av在线播放| 按摩亚洲人久久| 日韩最新中文字幕电影免费看| 中文字幕日韩av综合精品| 欧美性xxxxxx| 亚洲视频第一页| www.日韩欧美| 日韩av一区二区在线| 亚洲色图欧美制服丝袜另类第一页| 欧美最猛黑人xxxx黑人猛叫黄| 国产精品视频999| 色婷婷**av毛片一区| 亚洲成人网在线| 欧美国产日韩xxxxx| 亚洲性无码av在线|