当前位置: 首页 > 科技观察

WebViewJavascriptBridge-Obj-C和JavaScript之间的桥梁_0

时间:2023-03-12 06:03:35 科技观察

WebViewJavascriptBridge是一个iOS/OSX桥,用于Obj-C和JavaScript通过UIWebViews/WebViews交换消息。如果您喜欢WebViewJavascriptBridge,您可能还想看看WebViewProxy。Obj-C和JavaScript的原理很简单,Obj-C调用JavaScript很简单,通过webview的stringByEvaluatingJavaScriptFromString:方法调用JavaScript代码即可;JavaScript通过webview的代理方法shouldStartLoadWithRequest:调用Obj-C接收JavaScript网络请求实现调用。使用WebViewJavascriptBridge的项目有很多公司和项目都在使用WebViewJavascriptBridge。此列表不完整,欢迎补充。文件夹。打开iOS或OSX项目并单击运行。在自己的项目中使用WebViewJavascriptBridge:1)将WebViewJavascriptBridge文件夹拖到你的项目中。在出现的对话框中,取消(我觉得应该选)”Copyitemsintodestinationgroup'sfolder”,选择”Creategroupsforanyfolders”2)导入头文件,声明一个属性:#import"WebViewJavascriptBridge.h"...@propertyWebViewJavascriptBridge*bridge;3)实例化WebViewJavascriptBridge并带上一个UIWebView(iOS)或WebView(OSX):self.bridge=[WebViewJavascriptBridgebridgeForWebView:webViewhandler:^(iddata,WVJBResponseCallbackresponseCallback){NSLog(@"Receivedmessagefromjavascript:%@",data);responseCallback(@"Rightbackatcha");}];4)首先从ObjC到javascript发送一些消息:[self.bridgesend:@"Wellhellothere"];[self.bridgesend:[NSDictionarydictionaryWithObject:@"Foo"forKey:@"Bar"]];[self...window.WebViewJavascriptBridge){callback(WebViewJavascriptBridge)}else{document.addEventListener('WebViewJavascriptBridgeReady',function(){callback(WebViewJavascriptBridge)},false)}}connectWebViewJavascriptBridge(function(bridge){/*Inityourapphere*/bridge.init(功能(消息,responseCallback){警报('收到消息:'+消息)if(responseCallback){responseCallback(“Rightbackatcha”)}})bridge.send('Hellofromthejavascript')bridge.send('Pleaseresponsetothis',functionresponseCallback(responseData){console.log(“Javascriptgotitsresponse”,responseData)})})贡献者和Forks贡献者:https://github.com/marcuswestin/WebViewJavascriptBridge/graphs/contributorsForks:https://github.com/marcuswestin/WebViewJavascriptBridge/network/membersAPI参考ObjCAPI[WebViewJavascriptBridgebridgeForWebView:(UIWebView/WebView*)webviewhandler:(WVJBHandler)handler][WebViewJavascriptBridgebridgeForWebView:(UIWebView/WebView*)webviewwebViewDelegate:(UIWebViewDelegate*)webViewDelegatehandler:(WVJBHandler)handler]为网页视图创建一个javascript桥。如果javascript需要反馈,则WVJBResponseCallback不能为nil。当然,通过webViewDelegate:(UIWebViewDelegate*)webViewDelegate可以获取webview生命周期事件。示例:WebViewJavascriptBridgebridgeForWebView:webViewhandler:^(iddata,WVJBResponseCallbackresponseCallback){NSLog(@"Receivedmessagefromjavascript:%@",data);if(responseCallback){responseCallback(@"Rightbackatcha");}}][WebViewJavascriptBridgebridgeForWebView:webViewwebViewDelegate:selfhandler:^(iddata,WVJBResponseCallbackresponseCallback){/*...*/}];[bridgesend:(id)data][bridgesend:(id)dataresponseCallback:(WVJBResponseCallback)responseCallback]向javascript发送消息。消息发送成功后,可以通过responseCallback块进行一些反应。示例:[self.bridgesend:@"Hi"];[self.bridgesend:[NSDictionarydictionaryWithObject:@"Foo"forKey:@"Bar"]];[self.bridgesend:@"Iexpectaresponse!"responseCallback:^(idresponseData){NSLog(@"Gotresponse!%@",responseData);}];[bridgeregisterHandler:(NSString*)handlerNamehandler:(WVJBHandler)handler]注册一个名为handlerName的处理程序。JavaScript可以通过WebViewJavascriptBridge.callHandler(“handlerName”)处理程序调用它。示例:[self.bridgeregisterHandler:@"getScreenHeight"处理程序:^(iddata,WVJBResponseCallbackresponseCallback){responseCallback([NSNumbernumberWithInt:[UIScreenmainScreen].bounds.size.height]);}];[bridgecallHandler:(NSString*)handlerNamedata:(id)data][bridgecallHandler:(NSString*)handlerNamedata:(id)dataresponseCallback:(WVJBResponseCallback)callback]在javascript中调用名为handlerName的处理程序。成功调用处理程序后,它可以通过responseCallback块进行响应。示例:[self.bridgecallHandler:@"showAlert"data:@"HifromObjCtoJS!"];[self.bridgecallHandler:@"getCurrentPageUrl"data:nilresponseCallback:^(idresponseData){NSLog(@"CurrentUIWebViewpageURLis:%@",responseData);}];定义bundleWebViewJavascriptBridge需要将WebViewJavascriptBridge.js.txt文件嵌入到web视图中,以在JS端创建桥接。标准实现是用mainBundle找到这个文件。如果你构建了一个静态库,你把这个文件放在别处,你可以通过以下方法找到WebViewJavascriptBridgebridgeForWebView:(UIWebView/WebView*)webViewwebViewDelegate:(UIWebViewDelegate*)webViewDelegatehandler:(WVJBHandler)哈ndlerresourceBundle:(NSBundle*)bundle示例:[WebViewJavascriptBridgebridgeForWebView:_webViewwebViewDelegate:selfhandler:^(iddata,WVJBResponseCallbackresponseCallback){NSLog(@"Receivedmessagefromjavascript:%@",data);}resourceBundle:[NSBundlebundle@With"URL:[[NSBundlebundleWith"URL:[[NSBundlemainResourceBundle]ResourcesBundle"withExtension:@"bundle"]]];JavascriptAPIdocument.addEventListener('WebViewJavascriptBridgeReady',functiononBridgeReady(event){...},false)一直在等待WebViewJavascriptBridgeReadyDOM事件。例子:document.addEventListener('WebViewJavascriptBridgeReady',function(event){varbridge=event.bridge//Startusingthebridge},false)bridge.init(functionmessageHandler(data,response){…})初始化桥。这将调用'WebViewJavascriptBridgeReady'的事件处理程序。此messageHandler函数将接收通过ObjC的[bridgesend:(id)data]和[bridgesend:(id)dataresponseCallback:(WVJBResponseCallback)responseCallb发送的所有消息ack]方法。如果ObjC发送带有WVJBRes的消息ponseCallback块,然后你可以通过响应对象发送消息。示例:bridge.init(function(data,responseCallback){alert("Gotdata"+JSON.stringify(data))if(responseCallback){responseCallback("Rightbackatcha!")}})bridge.send(“你好!”)bridge.send({Foo:”Bar”})bridge.send(data,functionresponseCallback(responseData){…})向ObjC发送消息。发送成功后,可以通过responseCallback函数进行反应。示例:bridge.send("Hithhere!")bridge.send("Hithhere!",function(responseData){alert("Igotaresponse!"+JSON.stringify(responseData))})bridge.registerHandler("handlerName",function(responseData){…})注册一个名为handlerName的处理程序。ObjC可以通过[bridgecallHandler:”handlerName”data:@”Foo”]和[bridgecallHandler:”handlerName”data:@”Foo"responseCallback:^(idresponseData){…}]两种方法调用这个处理程序。示例:bridge.registerHandler("showAlert",function(data){alert(data)})bridge.registerHandler("getCurrentPageUrl",function(data,responseCallback){responseCallback(document.location.toString())})iOS4支持(包括JSONKit)注意:iOS4支持尚未在V2+中测试。WebViewJavascriptBridge默认使用NSJSONSerialization。如果你要支持iOS4,你可以使用JSONKit并将USE_JSONKIT预处理器宏添加到你的项目中。

最新推荐
猜你喜欢