项目里需要原生与H5进行交互,使用到了registerHandler、callHandler,WebViewJavaScriptBridge在iOS代码里有对应的removeHandler方法
但是在WebViewJavaScriptBridge_JS文件夹中没有removeHandler方法,于是新增里以下JS
window.GaiaWebViewJavascriptBridge 里添加removeHandler
window.GaiaWebViewJavascriptBridge = {
registerHandler: registerHandler,
callHandler: callHandler,
disableJavscriptAlertBoxSafetyTimeout: disableJavscriptAlertBoxSafetyTimeout,
_fetchQueue: _fetchQueue,
_handleMessageFromObjC: _handleMessageFromObjC,
removeHandler: removeHandler,
};
messageHandlers是默认处理函数,当JS调用OC方法时,根据方法名称找到不同的OC的block,或通过send()方法调用OC时,调用该默认messageHandlers。
所以实现removeHandler方法,只需要将messageHandlers对应的键值对删除即可。
实现removeHandler方法
function removeHandler(handlerName) {
if(messageHandlers[handlerName]){
delete messageHandlers[handlerName];
}
}
扩展:
WebViewJavaScriptBridge是一个轻量的OC与JS桥接机制,主要包含三个类,JS端window.WebViewJavascriptBridge,OC端WebViewJavascriptBridge和WebViewJavascriptBridgeBase。桥接类支持JS调用OC方法,OC调用JS方法。
JS调用OC通过重定向URL并获取HandlerName来调用,OC调用JS通过stringByEvaluatingJavaScriptFromString调用。
参考网上资料:https://blog.csdn.net/panfeng200866/article/details/60591015