目前,我正在尝试在Angular 2 Typescript中使用Google Recaptcha v2。我在“注册”表单中使用它。假设我有一个包含以下内容的表格:

<form id="signup-form">
  <div class="g-recaptcha" data-callback="verifyCallback" data-sitekey="6LetChQTAAAAACq4lmSL0L1-4rv47ZPrFKrkWOLf"></div>
</div>

在我的Signup类中,我使用以下代码在名为displayRecaptcha()的方法中显示小部件:
displayRecaptcha(){
    var doc = <HTMLDivElement>document.getElementById('signup-form');
    var script = document.createElement('script');
    script.innerHTML = '';
    script.src = 'https://www.google.com/recaptcha/api.js';
    script.async = true;
    script.defer = true;
    doc.appendChild(script);
    var d = document.createElement('script');
    d.innerHTML = `
    var verifyCallback() = function(response) {
     alert(response);
    };`
    document.querySelector('head').appendChild(d);
}

使用上面的代码,我可以显示Recaptcha,但是我只能使用Javascript中定义的verifyCallback()运行回调。当我使用Typescript时,是否仍然可以使用Signup类而不是Javascript中定义的方法来使回调运行?

最佳答案

我认为您将无法传递对该脚本的回调引用,但是您可以通过使用一个全局变量来对其进行打补丁,然后 typescript 可以访问该全局变量。

@Component({...})
export class MyComponent{

  constructor(){
    window['verifyCallback'] = this.verifyCallback.bind(this);
  }

  displayRecaptcha(){
    var doc = <HTMLDivElement>document.getElementById('signup-form');
    var script = document.createElement('script');
    script.innerHTML = '';
    script.src = 'https://www.google.com/recaptcha/api.js';
    script.async = true;
    script.defer = true;
    doc.appendChild(script);
  }

  verifyCallback(response){
    alert(response);
  }
}

关于typescript - Angular 2 Recaptcha 2回调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34974947/

10-13 05:29