【问题标题】:html dialog element is covering up invisible recaptcha challenge popup. how to fix this?html 对话框元素掩盖了不可见的 recaptcha 挑战弹出窗口。如何解决这个问题?
【发布时间】:2019-06-11 13:29:51
【问题描述】:

https://codepen.io/adamchenwei/pen/agbPYJ 以隐身模式访问示例,单击“打开”按钮打开示例登录表单,然后单击“注册”按钮触发挑战。 我不确定在对话框中使用 recaptcha 是否是一个不可修复的问题,或者它更多的是通过某种 css 和 html 的破解来解决的问题?在对话框上尝试了 z-index,根本不起作用..

HTML

<div id="app">
  <div class="container my-4">
    <div class="row justify-content-center">
      <div class="col-md-8">
        <h2 class="text-center mb-4">
          Sign Up Form with Google reCAPTCHA
        </h2>
        <dialog ref="mydialog">
          <form
              method="post">
          <div class="form-group">
            <input 
                   type="email" 
                   name="email" 
                   class="form-control" 
                   placeholder="Enter your e-mail address"
                   required />
          </div>
          <div class="form-group">
            <input 
                   type="password" 
                   name="password" 
                   class="form-control" 
                   placeholder="Enter your password"
                   required />
          </div>
          <div class="form-group">
            <vue-recaptcha
              ref="recaptcha"
              size="invisible"
              :sitekey="sitekey"
              @verify="register"
              @expired="onCaptchaExpired"
            />
            <button 
                    type="submit" 
                    class="btn btn-primary btn-block"
                    @click="validate">
              Sign Up
            </button>
          </div>
        </form>
        </dialog>
        <button @click="openDialog">open</button>
      </div>
    </div>
  </div>
</div>

JS

new Vue({
  el: '#app',

  components: { VueRecaptcha },

  data () {
    return {
      email: null,
      password: null,
      recaptchaToken: null,
      sitekey: '6Lfe33gUAAAAAMCuDwRfhSUV4sGkqGDaGrKqjkmZ'
    }
  },

  methods: {
    openDialog() {
      this.$refs.mydialog.showModal();
    },
    register () {
      // make post request to the server
    },

    validate () {
      // if validate true exec recaptcha
      this.$refs.recaptcha.execute()
    },

    onCaptchaExpired () {
      this.$refs.recaptcha.reset()
    }
  }
});

【问题讨论】:

    标签: javascript css vue.js recaptcha invisible-recaptcha


    【解决方案1】:

    事情是这样的:

    如果你使用&lt;dialog&gt;&lt;/dialog&gt;,它默认是隐藏的。

    使用&lt;dialog open&gt;&lt;/dialog&gt;在启动时显示对话框, 或者通过一些js打开对话框:

    // Update button opens a modal dialog
        updateButton.addEventListener('click', function() {
          dialog.showModal();
        });
    

    但是。对话框元素不是很受支持,所以我会 真的建议你不要使用它。

    https://caniuse.com/#feat=dialog

    因此你应该改变

    &lt;dialog class="my-dialog"&gt;&lt;/dialog&gt;

    &lt;div class="my-dialog"&gt;&lt;/div&gt;

    然后你应该在所有浏览器中看到它,这是支持的方式。

    【讨论】:

    • 是的,我知道。我想知道是否有办法解决它,而无需从对话框切换到其他元素?
    • @Ezeewei 我更新了我的答案!请注意 dialog 元素没有被广泛支持,所以我真的不鼓励你使用它
    猜你喜欢
    • 2017-01-17
    • 2018-05-25
    • 1970-01-01
    • 2023-03-03
    • 2017-09-15
    • 1970-01-01
    • 2012-01-04
    • 2017-05-15
    • 1970-01-01
    相关资源
    最近更新 更多