国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 系統(tǒng) > iOS > 正文

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

2019-10-21 18:39:38
字體:
來源:轉載
供稿:網(wǎng)友

前言

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

相比與 UIWebView, WKWebView 存在很多優(yōu)勢:

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

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

本文介紹通過 WKWebView協(xié)議攔截的方式實現(xiàn)iOS與JS交互。

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

一、JS調(diào)用iOS:

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

實現(xiàn)效果:

iOS,JS,交互,WKWebView,協(xié)議攔截
JS調(diào)用iOS實現(xiàn)效果

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調(diào)用OC入口function jsToOc(action, params) { var url = "jsToOc://" + action + "?" + params; loadURL(url);}//! 加載URLfunction loadURL(url) { window.location.href = url;}

iOS代碼:

#pragma mark - WKNavigationDelegate//! WKWeView在每次加載請求前會調(diào)用此方法來確認是否進行請求跳轉- (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);  }}

實現(xiàn)原理:

1、JS與iOS約定好jsToOc協(xié)議,用作JS在調(diào)用iOS時url的scheme;

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

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

4、iOS在此方法內(nèi)截取jsToOc協(xié)議獲取JS傳過來的數(shù)據(jù),用UIAlertController顯示出來,并通過decisionHandler不允許此請求跳轉。

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

二、iOS調(diào)用JS:

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

實現(xiàn)效果:

iOS,JS,交互,WKWebView,協(xié)議攔截
iOS調(diào)用JS實現(xiàn)效果

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

實現(xiàn)原理:

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

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

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

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

4、iOS通過completionHandler收到JS中ocToJs方法的回調(diào)。

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

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

可從QiShare的Github獲取工程源碼

總結

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


注:相關教程知識閱讀請移步到IOS開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产中文字幕在线| 99中文字幕一区| 国产主播色在线| 天堂在线一二区| 国产黄色在线播放| 亚洲尤物在线视频| 四虎国产精品永久在线| 久久综合精品视频| 国产青青草在线| 精精国产xxxx视频在线中文版| 日本欧洲一区| 91在线最新| 中文字幕视频在线免费| 99福利在线| 国产精品入口麻豆免费看| eeuss在线观看| 国产一二三区精品视频| av网址在线看| 国产精品美女一区二区视频| jizz亚洲大全| 92国产在线视频| 日本中文字幕在线看| av网站在线播放| 国产色在线 com| 在线中文免费视频| 国产一区二区三区不卡免费观看 | 亚洲男人网站| 久久五月精品| 免费黄色网页在线观看| 在线中文字幕第一页| 国产三区视频在线观看| 黄网在线免费| 久久一本精品| 国产尤物一区二区三区| 999在线视频| 精精国产xxxx视频在线中文版 | 在线观看的av网站| 国产激情二区| 2019中文字幕视频| 在线亚洲精品自拍| 99在线免费视频| 在线国产91| 欧美卡一卡二| 国产免费自拍视频| 五月综合网站| 国产美女一区视频| 成人欧美亚洲| 午夜在线小视频| 国产日韩欧美精品一区二区三区 | 天天干天天摸| 成在在线免费视频| 国产一区二区三区福利| 国产高清免费av在线| 2020中文字幕在线播放| 在线āv视频| 成人无遮挡免费网站视频在线观看| 狠狠干天天爱| 午夜国产视频| 国产超碰在线| 黄网在线免费| 精品极品三级久久久久| sese在线视频| 国产视频三级在线观看播放| 92久久精品| 国产麻豆精品一区二区三区v视界| 午夜国产在线| www.91在线播放| 日本中文字幕在线观看| 国产91足控脚交在线观看| 人日人天天爽| 国产黄色大片在线观看| 亚洲精品一区中文字幕电影| 久热中文字幕在线观看| 国产欧美日韩精品综合| gogo高清在线播放免费| 国产性一级片| 国产在线一二三| 精品卡一卡卡2卡3网站| 久久国产精品久久久久久小说| 国产小视频在线| 超碰免费97在线观看| 中文字幕在线影视资源| 四虎成年永久免费网站| 91国内精品在线视频| 国产一二三区在线观看| 啪啪免费视频一区| 亚洲wwwwww| 国产福利在线观看| 国产日本在线| 国产女主播在线观看| 国产精品天堂| 久热久精久品这里在线观看| 伊人网站在线| 伊人免费视频| 在线一区二区三区精品| 国产盗摄一区二区| 国产网站免费看| 国产一级在线观看www色| 国产免费福利| 国产美女性感在线观看懂色av| 亚洲videos| 快射av在线播放一区| www亚洲天堂| 青青草免费在线观看| 欧美视频免费一区二区三区| 91极品在线| 色吊丝av中文字幕| av在线不卡免费| 青青草原国产在线观看| 久久精品国产亚洲777| 国产在线观看a视频| 国产精品一区二三区| 国产鲁鲁视频在线观看特色| 国产麻豆视频网站| 国产精品久久久久久精| 97人人在线| 开心快乐六月丁香婷婷| 大香伊人久久| 2019中文字幕在线视频| 青青青青在线| 国产经典自拍视频在线观看 | 青青草视频在线免费观看| 久久久久久久美女| 国产羞羞视频在线播放| 日本免费视频www| 中文字幕日本在线观看| 精品99又大又爽又硬少妇毛片 | 亚洲视频在线观看不卡| 超碰在线97国产| 国产高清免费视频| 免费看成年人视频在线观看| 国产精品9区| 狠狠综合久久久综合| 精品推荐国产麻豆剧传媒| 久久国产综合视频| 亚洲最新永久在线观看| 国产一区二区影视| 国自产拍在线网站网址视频| 18激情网站| 国产网红在线观看| 超碰免费在线| 伊人伊人av电影| 国产成a人亚洲精v品| 国产小黄视频| 国产午夜视频| 国产麻豆精品入口在线观看 | 国产在线激情视频| 精品乱码一区二区三四区视频| 狠狠狠狠狠狠操| 本道综合精品| av网站在线播放| 在线观看免费高清完整| 97最新国自产拍视频在线完整在线看| 国产久草在线| 欧美色欧美亚洲另类二区精品| 在线观看电影av| 99re热在线观看| 亚洲精品手机在线| av在线日韩国产精品| 天天草天天干| 久草亚洲一区| 国产永久免费| 国产视频在线播放| 91av福利| 亚洲精品aaaa| 亚洲精品自产拍在线观看| av在线免费播放| 成人精品福利| 国产福利在线免费观看| 国产福利免费在线观看| 69免费视频| www.99av| 天堂在线视频| 国产精品久久久久久福利| 97影院理论午夜| www.色婷婷| 最近久乱中文字幕| 91欧洲在线视精品在亚洲| av亚洲男人天堂| 国产美女免费观看| 99福利在线| 最近中文字幕mv2018在线高清| 国产精品久久久久久久牛牛| 中文在线官网天堂| 欧美精品小视频| 丁香花视频在线观看| 91www在线观看| 激情综合丁香| 国产激情视频一区二区三区| 日本久久网站| 97视频在线| 中文字幕免费中文| 欧美日韩综合高清一区二区| 国产黄色片中文字幕| 老师我好爽再深一点的视频| 国产高清在线观看| 午夜国产视频| 久久久久久五月天久久久久久久久| 国产调教视频在线观看| 日本在线观看网站|