集成阿里云滑块验证码?现在每次切换页面路由就Cannot read properties of null (reading 'addEventListener')?

集成阿里云滑块验证码?现在每次切换页面路由 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
image.png

文档地址

// 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>
阅读 589
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏