這次帶給大家iOS與JS互動的三個需要注意點的點,iOS與JS互動的注意事項有哪些,下面給大家舉三個經典案列,我們一起來看一下。
1使用CocoaPods匯入WebViewJavascriptBridge
#這裡我們使用最新版本
pod 'WebViewJavascriptBridge', '~> 5.0.5'
導入工程的shell指令這裡我就不多說了。
2. 寫OC程式碼(先寫oc程式碼還是Js程式碼都可)
引入頭檔#import "WebViewJavascriptBridge.h"
建立兩個屬性
@property (nonatomic, strong) UIWebView * webView;@property WebViewJavascriptBridge* bridge; 初始化WebView和WebViewJavascriptBridge self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; [self.view addSubview:self.webView]; /**开启日志*/ [WebViewJavascriptBridge enableLogging]; /**初始化-WebViewJavascriptBridge*/ self.bridge = [WebViewJavascriptBridge bridgeForWebView:self.webView]; [self.bridge setWebViewDelegate:self];
3. JS呼叫OC程式碼
NOTICE:我們在寫這裡的呼叫程式碼之前,我們一定要知道前端js函數裡一定要知道函數名稱。這個很重要。
這裡我們假設前端有個函數名稱是callViewLoad他要呼叫OC的程式碼給回傳來的資料最列表處理。
看看OC的程式碼如何處理Js發送的請求
[self.bridge registerHandler:@"callViewLoad" handler:^(id data, WVJBResponseCallback responseCallback) { NSLog(@"前端發送的資料%@", data); if (responseCallback) { // respons給前端的資料
responseCallback(@{@"UName": @"洲洲哥的技術部落格",@"URLS":@ "http://www.jianshu.com/users/1338683b18e0/latest_articles"});
}
}];
#說這裡的參數說明
handler的回呼中有data、responseCallback兩個參數
這其中的data是前端js函數傳送給後端的資料:例如在登陸的時候,就要把帳號資訊和使用者密碼傳入後端,給後端處理。這裡的data就是存放著兩個資料的
responseCallback是我們要給前端js函數回傳的資料內容,前端給我們傳入了使用者名稱和密碼,我們呼叫介面之後又回傳登陸結果給前端就是要用他了。但是以字典形式返回。
到這裡我們的JS呼叫OC,oc端的程式碼已經說完了。
前端JS程式碼的寫法
html的程式碼寫法
<html> <head> <title>OC和JS互动Web</title> <script> /*这段代码是固定的,必须要放到js中*/ 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) } /**与OC交互的所有JS方法都要放在此处注册,才能调用通过JS调用OC或者让OC调用这里的JS*/ setupWebViewJavascriptBridge(function(bridge) { /**OC调用JS代码不含参数*/ bridge.registerHandler('UserLogin', function() { alert('UserLogin') }) /**OC调用JS代码含参数*/ bridge.registerHandler('UserLoginInfo', function(data, responseCallback) { responseCallback({'userId': '123456', 'Names': 'ZHOUZHOUGEDEBOKE'}) }) // **********************************JS调用OC bridge.callHandler('callViewLoad', {'blogURL': 'http://www.henishuo.com'}, function(responseCallback){ alert(responseCallback.UName) }) }) </script> </head> <body> <button style = "background: yellow; height: 50px; width: 100px;">JS/OC互动</button> </body> </html>
我們這裡主要看html程式碼中的callViewLoad函數。這個就是他呼叫oc函數證明。這裡的callHandler的里的參數可以看看
第一個參數callViewLoad :函數名稱
{'blogURL': 'http://www.henishuo.com'}:表示給OC程式碼傳入的資料
function(responseCallback) : 接受成功返回的JS函數這裡可以在後端成功返回之後在這裡我們可以監聽到。和OC的Block類似。
這個函數的說明:JS給ObjC提供公開的API,ObjC端透過註冊,就可以在JS端呼叫此API時,得到回呼。 ObjC端可以在處理完成後,回饋給JS,這樣寫就是在載入頁面完成時就先呼叫。
NOTICE:這裡只說了JS呼叫OC程式碼的宣告。間間單單的介紹了一個方法的使用。但是我們也看到了再寫前端JS函數的時候,有那麼一大塊程式碼是必須要寫的。不然是不會產生聯合效果的。
相信看了這些案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
相關閱讀:
#以上是iOS與JS互動詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!