iOS和JS交互教程之WKWebView-协议拦截详解

2020-01-21 07:00:03刘景俊

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

//! 加载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);
  }
}

实现原理:

1、JS与iOS约定好jsToOc协议,用作JS在调用iOS时url的scheme;

2、JS在登录成功后加载含有token数据的url: (jsToOc://loginSucceed?js_tokenString);