WebViewJavascriptBridge5.0中添加send和init方法

**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方法同理。  

 

 

 

 

     

 

 

 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容