iOS学习笔记iOS开发知识小集iOS开发你需要知道的

WKWebView使用WebViewJavascriptBrid

2018-09-29  本文已影响2人  这个汤圆没有馅

H5和原生端交互,用WebViewJavascriptBridge其实挺简单的。只要参照github上的Demo即可。

function setupWebViewJavascriptBridge(callback) {
    if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
    if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
    window.WVJBCallbacks = [callback];
    var WVJBIframe = document.createElement('iframe');
    WVJBIframe.style.display = 'none';
    WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
    document.documentElement.appendChild(WVJBIframe);
    setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
}
如果没有这段js代码,红框里的代码就不会执行。
这句代码[_base injectJavascriptFile]是注入js文件,也是交互的关键。在执行这行代码之前,有这么一个判断[_base isBridgeLoadedURL:url]。点进去查看,具体方法如下:
-(BOOL)isBridgeLoadedURL:(NSURL*)url {
    return ([[url scheme] isEqualToString:kCustomProtocolScheme] && [[url host] isEqualToString:kBridgeLoaded]);
}
/*
#define kCustomProtocolScheme @"wvjbscheme"
#define kQueueHasMessage      @"__WVJB_QUEUE_MESSAGE__"
#define kBridgeLoaded         @"__BRIDGE_LOADED__"
*/
如果H5代码不加上述规定的js代码,那么这个if语句里传入的url永远都是最原始传入html的地址,return NO,因此也就不会执行[_base injectJavascriptFile]
解决方法如下,加一行代码即可。参考issue。不知为何,作者始终没有合并这个issue也没有修复这个bug,所以通过cocoapods集成的同学别忘记改源码。
上一篇 下一篇

猜你喜欢

热点阅读