JS調用iOS之WKNavigationDelegate協(xié)議

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

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

  • 實現(xiàn)效果:

    image
  • 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);
}

//! 加載URL
function 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);
    }
}
  • 實現(xiàn)原理:
    1、JS與iOS約定好jsToOc協(xié)議,用作JS在調用iOS時url的scheme
    2、JS在登錄成功后加載含有token數(shù)據(jù)的url:(jsToOc://loginSucceed?js_tokenString)
    3、iOS的WKWebView在請求跳轉前會調用-webView:decidePolicyForNavigationAction:decisionHandler:方法來確認是否允許跳轉;
    4、iOS在此方法內截取jsToOc協(xié)議獲取JS傳過來的數(shù)據(jù),用UIAlertController顯示出來,并通過decisionHandler不允許此請求跳轉。

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


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

相關閱讀更多精彩內容

友情鏈接更多精彩內容