Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)
本文是将前文的口令验证功能封装成插件,所以最终实现的功能是一样的。即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) } } |
(2)hangge-swift-plugin.js
JS模块文件,这里封装了插件的调用方法,这样在页面中使用的时候更加方便。
比如前文我们通过 Cordova.exec() 来调用 Swift 代码,这里我们使用 插件名称.插件方法() 即可,这样使用起来更加方便,代码也更加清晰。其内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
'use strict' ; var exec = require( 'cordova/exec' ); var HanggeSwiftPlugin = { verifyPassword: function (sendMsg, onSuccess, onFail) { return exec(onSuccess, onFail, 'HanggeSwiftPlugin' , 'verifyPassword' , [sendMsg]); } }; module.exports = HanggeSwiftPlugin; |
(3)plugin.xml
插件的配置文件。用来配置插件的名字,JS模块文件位置,以及各个平台的功能实现源码位置(这里只实现的iOS的验证功能,所以只配置了iOS平台相关内容)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<? xml version = "1.0" encoding = "UTF-8" ?> id = "hangge-swift-plugin" version = "0.1" > < name >HanggeSwiftPlugin</ name > < description >This plugin use to verify password</ description > < js-module src = "hangge-swift-plugin.js" > < clobbers target = "window.HanggeSwiftPlugin" /> </ js-module > <!-- iOS --> < platform name = "ios" > < config-file target = "config.xml" parent = "/*" > < feature name = "HanggeSwiftPlugin" > < param name = "ios-package" value = "HWPHanggeSwiftPlugin" /> </ feature > </ config-file > < source-file src = "src/ios/HanggeSwiftPlugin.swift" /> </ platform > </ plugin > |
4,自定义插件的安装
封装好的插件我们通过 cordova plugin add 命令来安装,假设我们要给 HelloWorld 这个工程添加刚才做的那个自定义验证插件。
1
|
cordova plugin add cordova-plugin-add-swift-support |
(2)假设我们做的自定义插件是在用户“文稿”目录下,运行如下命令把这个插件添加到工程中来:
1
|
cordova plugin add ~/Documents/HanggeSwiftPlugin |
进入项目文件夹下的 plugins 文件夹可以看到,自定义插件已经成功的添加进来。当然,这个自定义插件在各个平台工程下也同步安装了。

(3)以后如果想移除这个自定义插件,运行如下命令即可:
1
|
cordova plugin rm hangge-swift-plugin |
5,自定义插件的使用
修改首页 index.html 为如下内容。
(1)我们还是可以通过Cordova.exec()来调用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
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> |
在“终端”中运行如下命令编译:
1
|
cordova build |
接着运行如下命令使用模拟器运行,即可看到效果:
1
|
cordova emulate ios |
(2)当然还是建议使用 模块名.模块方法() 的形式调用自定义插件
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
|
<!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; //调用自定义的验证插件 HanggeSwiftPlugin.verifyPassword(password, successFunction, failFunction); } //验证成功 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> |
(3)回调方法可以使用匿名函数
1
2
3
4
5
6
7
8
9
10
11
|
//开始验证 function verify() { //获取输入的口令 var password = document.getElementById( "pwd" ).value; //调用自定义的验证插件 HanggeSwiftPlugin.verifyPassword(password, function () { alert( "口令验证成功!" );}, function (message){ alert( "验证失败:" +message); }); } |
(4)在使用自定义插件之前还可以判断下插件是否存在,以防报错
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//开始验证 function verify() { //获取输入的口令 var password = document.getElementById( "pwd" ).value; //调用自定义的验证插件 if (window.HanggeSwiftPlugin) { HanggeSwiftPlugin.verifyPassword(password, function () { alert( "口令验证成功!" );}, function (message){ alert( "验证失败:" +message); }); } else { alert( "未安装验证插件!" ); } } |
原文出自:www.hangge.com 转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1152.html
Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)的更多相关文章
- Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)
在前面的文章中介绍的了如何使用Cordova进行跨平台应用的开发,使用Cordova的话基本上就不需要在写系统原生代码了,只要通过编写html页面和js方法即可. 但在有些特殊情况下,还是是需要htm ...
- cordova与ios native code交互的原理
非常早曾经写了一篇博客,总结cordova插件怎么调用到原生代码:cordova调用过程,只是写得太水.基本没有提到原理.近期加深了一点理解,又一次补充说明一下 js调用native 以下是我们产品中 ...
- unity调用ios原生代码objective-c和回调
从c#到objective-c学习 https://www.runoob.com/w3cnote/objective-c-tutorial.html https://www.jianshu.com/p ...
- Unity与iOS原生代码之间的相互调用
1.Unity调用iOS: 1.1.在Unity C#中: [ DllImport( "__Internal" )] private static extern int _show ...
- RN和IOS原生端交互
1.RCTBridgeModule #import <Foundation/Foundation.h> #import "RCTBridgeModule.h" #imp ...
- 使用原生代码实现一个Events模块,可以实现自定义事件的订阅、触发、移除功能
function Events() { // 放置所有添加的 监听事件 this._events = {} } Events.prototype = { on: function (name, fn, ...
- iOS原生APP与H5+JS交互////////////////////zzzz
原生代码中直接加载页面 1. 具体案例 加载本地/网络HTML5作为功能介绍页 2. 代码示例 //本地 -(void)loadLocalPage:(UIWebView*)webView ...
- PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码
PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ...
- iOS原生和React-Native之间的交互1
今天,记录一下iOS原生和React-Native之间的交互.如果第一次接触最好先移步至 http://www.cnblogs.com/shaoting/p/6388502.html 先看一下怎么在i ...
随机推荐
- ios必须知道的事情
一. 学前提醒 其实iOS开发就是开发iPhone\iPad上的软件,而要想开发一款软件,首先要学习程序设计语言 iOS开发需要学习的主要程序设计语言有:C语言.C++.Objective-C,其中C ...
- 【Android】保存Fragment切换状态
前言 一般频繁切换Fragment会导致频繁的释放和创建,如果Fragment比较臃肿体验就非常不好了,这里分享一个方法. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.c ...
- Java 控制线程
1.join public class JoinThreadTest extends Thread { public JoinThreadTest(String name){ super(name); ...
- css简介及相关概念
一.简介: css全称为级联样式表(Cascading Style Sheet),通常又称为风格样式表(Style Sheet),是用来进行网页风格设计的. css优点: 内容与表现分离 表现的统一 ...
- ORACLE查看数据文件包含哪些对象
在上篇ORACLE查看表空间对象中,我介绍了如何查询一个表空间有那些数据库对象,那么我们是否可以查看某个数据文件包含那些数据库对象呢?如下所示 SELECT E.SEGMENT_TYPE ...
- 如何编译ReactNative示例程序Examples
通过示例程序可以看到一些基本组件的使用,对于学习ReactNative是很有帮助的. 编译示例程序需要将整个项目导入到androidStudio中,androidStudio导入项目时选择react- ...
- df,du,mount
df 查看当前系统中文件系统的使用情况 $df [-aTh]缺省选项查看当前系统的所有文件系统 -a列出所有的信息 -T列出文件系统类型 -hhuman-readable,用合适的单位表示大小 $df ...
- Jmeter默认报告优化
一.本文目的: 之前写了两篇文章搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)和ANT批量执行Jmeter脚本,功能实现上都没有什么问题,但是最后生成的报告有一点小问题,虽然不影响使 ...
- PlaceHolder的两种实现方式
placeholder属性是HTML5 中为input添加的.在input上提供一个占位符,文字形式展示输入字段预期值的提示信息(hint),该字段会在输入为空时显示. 如 <input typ ...
- jquery图片时钟
一.生成数字时钟 <script src="http://code.jquery.com/jquery-latest.js"></script> <s ...