首頁 >web前端 >js教程 >iOS與JS互動詳解

iOS與JS互動詳解

php中世界最好的语言
php中世界最好的语言原創
2018-03-06 11:23:281951瀏覽

這次帶給大家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(&#39;iframe&#39;);
                WVJBIframe.style.display = &#39;none&#39;;
                WVJBIframe.src = &#39;wvjbscheme://BRIDGE_LOADED&#39;;                document.documentElement.appendChild(WVJBIframe);
                setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
            }        
        /**与OC交互的所有JS方法都要放在此处注册,才能调用通过JS调用OC或者让OC调用这里的JS*/
        setupWebViewJavascriptBridge(function(bridge) {             /**OC调用JS代码不含参数*/
             bridge.registerHandler(&#39;UserLogin&#39;, function() {
                                    alert(&#39;UserLogin&#39;)
             })             /**OC调用JS代码含参数*/
             bridge.registerHandler(&#39;UserLoginInfo&#39;, function(data, responseCallback) {
                    responseCallback({&#39;userId&#39;: &#39;123456&#39;, &#39;Names&#39;: &#39;ZHOUZHOUGEDEBOKE&#39;})
            })                                     
             // **********************************JS调用OC
             bridge.callHandler(&#39;callViewLoad&#39;, {&#39;blogURL&#39;: &#39;http://www.henishuo.com&#39;}, 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中文網其它相關文章!

相關閱讀:

ES6 module語法載入import export.

image與view標籤上下有空隙的解決方法

為什麼slot都是用在子元件

#實作瀑布流佈局的兩個方法

#

以上是iOS與JS互動詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn