**WebViewJavascriptBridge升级至5.0**
***旧版本WebViewJavascriptBridge中有三个文件,不支持WKWebView***
WebViewJavascriptBridge.h
WebViewJavascriptBridge.js.txt
WebViewJavascriptBridge.m
***新版本WebViewJavascriptBridge中有8个文件,去掉了js.txt文件,将js代码写入了WebViewJavascriptBridge_JS.m中,支持WKWebView,但是少了init和send方法,OC发消息给JS只能通过callhandler的方式***
WebViewJavascriptBridge.h
WebViewJavascriptBridge.m //支持UIWebView
WebViewJavascriptBridge_JS.h
WebViewJavascriptBridge_JS.m //js代码
WebViewJavascriptBridgeBase.h
WebViewJavascriptBridgeBase.m
WKWebViewJavascriptBridge.h
WKWebViewJavascriptBridge.m //支持WKWebView
******
WKWebViewJavascriptBridge.h 中没有send方法。
对应JS文件WebViewJavascriptBridge_JS.m中没有init方法来接收消息。
导致[_mWebViewJSBridge send:jsonStr responseCallback:(WVJBResponseCallback)responseCallback];
和bridge.init(function (message, responseCallback) {});
配套方法不能用,为避免已经上线版本出问题,决定加上实现方法。
**首先OC中添加send方法**
打开WKWebViewJavascriptBridge.m发现- (void)send:(id)data responseCallback:(WVJBResponseCallback)responseCallback {}方法已经在代码中实现,直接讲方法名在.h文件中暴露出来即可使用。
打开WebViewJavascriptBridge_JS.m文件
在字典WebViewJavascriptBridge中加入init:init,暴露出方法。
window.WebViewJavascriptBridge = {
init:init,
registerHandler: registerHandler,
callHandler: callHandler,
disableJavscriptAlertBoxSafetyTimeout: disableJavscriptAlertBoxSafetyTimeout,
_fetchQueue: _fetchQueue,
_handleMessageFromObjC: _handleMessageFromObjC
};
增加init方法实现:
function init(messageHandler) {
if (WebViewJavascriptBridge._messageHandler) { throw new Error('WebViewJavascriptBridge.init called twice'); }
WebViewJavascriptBridge._messageHandler = messageHandler;
var receivedMessages = receiveMessageQueue;
receiveMessageQueue = null;
for (var i=0; i
_dispatchMessageFromObjC(receivedMessages[i]);
}
}
添加全局变量 receiveMessageQueue
var receiveMessageQueue = [];
修改_dispatchMessageFromObjC方法
var handler = WebViewJavascriptBridge._messageHandler;
if (message.handlerName) {
handler = messageHandlers[message.handlerName];
}
//var handler = messageHandlers[message.handlerName];//原本是这行
至此init方法即可使用,send方法同理。