/** * トークンを取得しサーバーに送信する * * @param {string} siteKey サイトキー * @param {string} element Form要素のID [ element ID ] * @param {string} action アクション名 */ function googleRecaptchaForm(siteKey, element, action) { var recaptchaForm = document.getElementById(element); //フォーム要素にイベントハンドラを設定 recaptchaForm.onsubmit = function (event) { //バリデーションエラー if (!Spry.Widget.Form.validate(this)) { return false; } //デフォルトの動作 [送信] を停止 event.preventDefault(); //トークンを取得 grecaptcha.ready(function () { try { grecaptcha.execute(siteKey, {action: action}) .then(function (token) { //トークンを送信するためのinput要素を生成 var tokenInput = document.createElement('input'); tokenInput.type = 'hidden'; tokenInput.name = 'g-recaptcha-response'; tokenInput.value = token; recaptchaForm.appendChild(tokenInput); //アクション名を送信するためのinput要素を生成 var actionInput = document.createElement('input'); actionInput.type = 'hidden'; actionInput.name = 'action'; actionInput.value = action; recaptchaForm.appendChild(actionInput); //フォームを送信 recaptchaForm.submit(); }, function(reason) { //トークン取得失敗 recaptchaForm.submit(); }); } catch (e) { //トークン取得失敗 recaptchaForm.submit(); } }); }; }