以网易云易盾验证码为参考案例:
兼容性
IE7+、Chrome、Firefox、Safari、Opera、主流手机浏览器、iOS 及 Android上的内嵌Webview
开始使用
引入初始化JS
<script src="//cstaticdun.126.net/load.min.js"></script>
调用初始化函数
initNECaptcha(config, onload, onerror)
// initNECaptcha为全局函数,可直接调用 initNECaptcha({ // config对象,参数配置 captchaId: '从易盾申请的captchaId', element: '#captcha', mode: 'float', width: '320px' }, function (instance) { // 初始化成功后得到验证实例instance,可以调用实例的方法 }, function (err) { // 初始化失败后触发该函数,err对象描述当前错误信息 })
参数配置
这里指初始化时传入的config
对象,即调用初始化函数initNECaptcha
时传入的第一个参数。智能验证码设置参数有些不同,详见表格下方特别说明。
参数 | 参数类型 | 必填 | 默认 | 说明 |
---|---|---|---|---|
captchaId |
string | 是 | 无 | 验证码id |
element |
string | HTMLElement | * | 无 |
mode |
string | 否 | PC端默认"float" ,移动端默认"popup" |
验证码模式,三种模式可选:"float" 、"embed" 、"popup" ,即触发式、嵌入式、弹出式。 |
protocol |
string | 否 | 与用户网站的网络协议一致 | 验证码传输数据使用的网络协议,可选:"http" 、"https" |
width |
number | string | 否 | "auto" |
lang |
string | 否 | "zh-CN" | 验证码语言选项。支持"zh-CN" 、"en" ,即简体中文和英文 |
onReady |
function | 否 | 无 | NECaptcha所有工作准备就绪,用户可以使用验证码时触发该回调。具体使用见完整示例 |
onVerify |
function | 否 | 无 | 验证码验证结束回调函数。具体使用见完整示例 |
特别注意
对于智能无感知验证码,参数mode
和width
的设置均无效。验证按钮宽度与容器宽度一致,容器宽度最小240px。
实例方法
这里指initNECaptcha
初始化成功,onload
触发时传入的实例的方法。
refresh
:刷新验证码,获取新的验证信息destroy
:销毁当前实例popUp
:当验证码是常规验证码并且mode
为"popup"时,可调用该实例方法弹出验证码进行验证
示例:
initNECaptcha(config, function onload (instance) { // 可在此处调用实例方法 }, onerror)
完整示例
使用form表单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>验证码示例</title> </head> <body> <form action="/login" method="post"> <input type="text" name="username" placeholder="用户名"> <input type="password" name="password" placeholder="密码"> <input type="hidden" name="captchaId" value="从易盾申请的captchaId"> <div id="captcha"></div> <!-- 验证码容器元素 --> <button type="submit">登录</button> </form> <script src="//cstaticdun.126.net/load.min.js"></script><!-- 初始化JS --> <script> initNECaptcha({ captchaId: '从易盾申请的captchaId', element: '#captcha', mode: 'float', width: 320 }, function onload (instance) { // 初始化成功后,用户输入对应用户名和密码,以及完成验证后,直接点击登录按钮即可 }, function onerror (err) { // 验证码初始化失败处理逻辑,例如:提示用户点击按钮重新初始化 }) </body> </html>
使用onVerify
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> 验证码示例 </head> <body> <div class="form-container"> <input type="text" name="username" id="username" placeholder="用户名"> <input type="password" name="password" id="password" placeholder="密码"> <div id="captcha"></div> <!-- 验证码容器元素 --> 登录 </div> <script src="//cstaticdun.126.net/load.min.js"></script><!-- 初始化JS --> <script> initNECaptcha({ captchaId: '从易盾申请的captchaId', element: '#captcha', mode: 'float', width: 320, onReady: function (instance) { // 验证码一切准备就绪,此时可正常使用验证码的相关功能 }, onVerify: function (err, data) { /** * 第一个参数是err(Error的实例),验证失败才有err对象 * 第二个参数是data对象,验证成功后的相关信息,data数据结构为key-value,如下: * { * validate: 'xxxxx' // 二次验证信息 * } */ // 点击登录按钮后可调用服务端接口,以下为伪代码,仅作示例用 ajax('/login', { captchaId: '从易盾申请的captchaId', username: $('#username').val(), password: $('#password').val(), validate: data.validate }, function onsuccess (data) { // 登录成功后,相关处理逻辑 }) } }, function onload (instance) { // 初始化成功 }, function onerror (err) { // 验证码初始化失败处理逻辑,例如:提示用户点击按钮重新初始化 }) </body> </html>
使用popup模式
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>验证码示例-popup模式</title> </head> <body> <button id="j-popup">点击弹出验证码</button> <div id="captcha"></div> <script charset="UTF-8" type="text/javascript" src="http://cstaticdun.126.net/load.min.js"></script> <script> var captchaIns; initNECaptcha({ element: '#captcha', captchaId: '从易盾申请的captchaId', mode: 'popup', width: '320px' }, function (instance) { // 初始化成功后得到验证实例instance,可以调用实例的方法 captchaIns = instance }, function (err) { // 初始化失败后触发该函数,err对象描述当前错误信息 }) // 监听button的点击事件,弹出验证码 document.getElementById('j-popup').addEventListener('click', function () { captchaIns.popUp() }) </body> </html>
特别说明
onload
和onReady
的区别:onload
和onReady
触发时,均会返回验证码的实例,即传入的第一个参数。二者触发时机有所不同,onload
触发时,初始化函数结束和完成实例的生成,注意这并不代表验证码是可用的(比如验证码相关背景图片和信息并没有加载),此方法只触发一次。onReady
触发时,说明验证码准备就绪(比如背景图片等信息均已加载),在popup
模式下,每次弹出均会触发onReady
,其他模式下onReady
只触发一次。
文章来自:网易云
相关导读:
如何评价 12306 的图片型验证码?