Cordova - 與iOS原生代碼交互1(通過JS調用Swift方法)


在前面的文章中介紹的了如何使用Cordova進行跨平台應用的開發,使用Cordova的話基本上就不需要在寫系統原生代碼了,只要通過編寫html頁面和js方法即可。
但在有些特殊情況下,還是是需要html頁面能和系統原生代碼( ios native code)進行交互。下面介紹如何實現 JS 與 Swift 代碼間的相互通信。

假設我們已經建立了一個名叫 HelloWorld 的Cordova工程項目(不太清楚如何使用Cordova的可以參考我前面寫的幾篇文章:使用Cordova開發iOS應用實戰1(配置、開發第一個應用)
原文:Cordova - 與iOS原生代碼交互1(通過JS調用Swift方法)

1,樣例說明
(1)雖然使用Cordova創建的工程是一個 OC 工程,但由於蘋果可以很方便的支持混合編程,所以我們用 Swift 來實現與 JS 的交互也是可以的。
(2)這里我們使用Swift來做個口令驗證的功能,由於只是演示,所以代碼很簡單。Swift這邊接收傳輸過來的口令字符串,判斷正確與否並反饋回頁面。如果驗證失敗還會返回具體的失敗原因信息。

2,樣例效果圖
       原文:Cordova - 與iOS原生代碼交互1(通過JS調用Swift方法)       原文:Cordova - 與iOS原生代碼交互1(通過JS調用Swift方法)

       原文:Cordova - 與iOS原生代碼交互1(通過JS調用Swift方法)       原文:Cordova - 與iOS原生代碼交互1(通過JS調用Swift方法)

3,實現步驟
(1)我們在 Plugins 文件夾中新建一個Swift文件(HanggeSwiftPlugin.swift)。創建的時候系統會提示是否同時創建橋接頭文件,這里選擇確定。
原文:Cordova - 與iOS原生代碼交互1(通過JS調用Swift方法)

(2)在新生成的橋接頭文件 HelloWorld-Bridging-Header.h 中把 Cordova/CDV.h 給 import 進來
1
#import < Cordova /CDV.h>

(3)新建的 HanggeSwiftPlugin.swift 中添加如下代碼 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import Foundation
 
@objc ( HWPHanggeSwiftPlugin ) class HanggeSwiftPlugin : CDVPlugin {
     
     //驗證口令方法
     func verifyPassword(command: CDVInvokedUrlCommand )
     {
         //返回結果
         var pluginResult: CDVPluginResult ?
         //獲取參數
         let password = command.arguments[0] as ? String
         
         //開始驗證
         if password == nil || password == "" {
             pluginResult = CDVPluginResult (status: CDVCommandStatus_ERROR ,
                                            messageAsString: "口令不能為空" )
         } else if password != "hangge" {
             pluginResult = CDVPluginResult (status: CDVCommandStatus_ERROR ,
                                            messageAsString: "口令不正確" )
         } else {
             pluginResult = CDVPluginResult (status: CDVCommandStatus_OK )
         }
         
         //發送結果
         self .commandDelegate.sendPluginResult(pluginResult, callbackId: command.callbackId)
     }
}

(4)在 config.xml 中添加如下配置,將我們創建的功能類給配置上
1
2
3
< feature name = "HanggeSwiftPlugin" >
     < param name = "ios-package" value = "HWPHanggeSwiftPlugin" />
</ feature >

(5)首頁 index.html 代碼如下,修改運行后即可看到效果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!DOCTYPE html>
<html>
     <head>
         <title>口令驗證</title>
         <meta http-equiv= "Content-type" content= "text/html; charset=utf-8" >
             <script type= "text/javascript" charset= "utf-8" src= "cordova.js" ></script>
             <script type= "text/javascript" charset= "utf-8" >
                 //開始驗證
                 function verify() {
                     //獲取輸入的口令
                     var password = document.getElementById( "pwd" ).value;
                     //調用自定義的驗證插件
                     Cordova.exec(successFunction, failFunction, "HanggeSwiftPlugin" ,
                                  "verifyPassword" , [password]);
                 }
             
                 //驗證成功
                 function successFunction(){
                     alert( "口令驗證成功!" );
                 }
             
                 //驗證失敗
                 function failFunction(message){
                     alert( "驗證失敗:" +message);
                 }
             </script>
             <style>
                 * {
                     font-size:1em;
                 }
             </style>
     </head>
     <body style= "padding-top:50px;" >
         <input type= "text" id= "pwd" >
         <button onclick= "verify();" >驗證</button>
     </body>
</html>

原文出自:www.hangge.com  轉載請保留原文鏈接:http://www.hangge.com/blog/cache/detail_1150.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM