集成阿里云滑块验证码?现在每次切换页面路由 this.router("/push")
就报错Uncaught (in promise) TypeError: Cannot read properties of null (reading 'addEventListener')?现在写法跟demo是一样的,该怎么改呢?
报错页面是https://g.alicdn.com/captcha-frontend/dynamicJS/1.1.0/sg.cdec2e19d71dad5d9c4c.js
// 1.集成主JS
<script type="text/javascript" src="https://o.alicdn.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js"></script>
// 2.新建一个<script>标签,用于调用验证码初始化函数initAliyunCaptcha
<script>
let captcha;
// 嵌入式
initAliyunCaptcha({
SceneId: 'c9h3****', // 场景ID。通过步骤一添加验证场景后,您可以在验证码场景列表,获取该场景的场景ID
prefix: '89****', // 身份标。开通阿里云验证码2.0后,您可以在控制台概览页面的实例基本信息卡片区域,获取身份标
mode: 'embed', // 验证码模式。embed表示要集成的验证码模式为嵌入式。无需修改
element: '#captcha-element', // 页面上预留的渲染验证码的元素,与原代码中预留的页面元素保持一致。
button: '#button', // 触发业务请求的元素。button表示单击登录按钮后,触发captchaVerifyCallback函数。您可以根据实际使用的元素修改element的值
captchaVerifyCallback: captchaVerifyCallback, // 业务请求(带验证码校验)回调函数,无需修改
onBizResultCallback: onBizResultCallback, // 业务请求结果回调函数,无需修改
getInstance: getInstance, // 绑定验证码实例函数,无需修改
slideStyle: {
width: 360,
height: 40,
}, // 滑块验证码样式,支持自定义宽度和高度,单位为px。其中,width最小值为320 px
language: 'cn', // 验证码语言类型,支持简体中文(cn)、繁体中文(tw)、英文(en)
immediate: false, // 完成验证后,是否立即发送验证请求(调用captchaVerifyCallback函数)
region: 'cn' //验证码示例所属地区,支持中国内地(cn)、新加坡(sgp)
});
// 绑定验证码实例函数。该函数为固定写法,无需修改
function getInstance(instance) {
captcha = instance;
}
// 业务请求(带验证码校验)回调函数
/**
* @name verifyCaptchaCallback
* @function
* 请求参数:由验证码脚本回调的验证参数,不需要做任何处理,直接传给服务端即可
* @params {string} captchaVerifyParam
* 返回参数:字段名固定,captchaResult为必选;如无业务验证场景时,bizResult为可选
* @returns {{captchaResult: boolean, bizResult?: boolean|undefined}}
*/
async function captchaVerifyCallback(captchaVerifyParam) {
// 1.向后端发起业务请求,获取验证码验证结果和业务结果
const result = await xxxx('http://您的业务请求地址', {
captchaVerifyParam: captchaVerifyParam, // 验证码参数
yourBizParam... // 业务参数
});
// 2.构造标准返回参数
const verifyResult = {
captchaResult: result.captchaVerifyResult, // 验证码验证是否通过,boolean类型,必选
bizResult: 从result获取您的业务验证结果, // 业务验证是否通过,boolean类型,可选,若为无业务验证结果的场景,bizResult可以为空
};
return verifyResult;
}
// 业务请求结果回调函数
function onBizResultCallback(bizResult) {
if (bizResult === true) {
// 如果业务验证通过,跳转到对应页面。此处以跳转到https://www.aliyun.com/页面为例
window.location.href = 'https://www.aliyun.com/';
} else {
// 如果业务验证不通过,给出不通过提示。此处不通过提示为业务验证不通过!
alert('业务验证不通过!');
}
}
</script>