V3でインラインバッジを使用したいのですが、v3のバッジの位置に関するドキュメントはありません。
まだ文書化されていないJavascriptを使用して、V3でバッジをインラインにすることができます。
render
パラメーターをexplicit
に設定し、コールバック用のonload
パラメーター、たとえばonRecaptchaLoadCallback
を追加します。
<script src="https://www.google.com/recaptcha/api.js?render=explicit&onload=onRecaptchaLoadCallback"></script>
次に、コールバックをそのように設定し、バッジの移動先のID/DOMノードを入力することを忘れないでください。この場合、IDはinline-badge
。
<script>
function onRecaptchaLoadCallback() {
var clientId = grecaptcha.render('inline-badge', {
'sitekey': '6Ldqyn4UAAAAAN37vF4e1vsebmNYIA9UVXZ_RfSp',
'badge': 'inline',
'size': 'invisible'
});
grecaptcha.ready(function() {
grecaptcha.execute(clientId, {
action: 'action_name'
})
.then(function(token) {
// Verify the token on the server.
});
});
}
</script>
Grecaptcha-badgeクラスのCSSを次のように変更します。
.grecaptcha-badge {
bottom:25px !important;
}
実行後、バッジをJavascriptで移動できます。 firefoxおよびchromeブラウザのrecaptchaタイムアウトエラーを修正します。
grecaptcha.ready(function() {
grecaptcha.execute('sitekey', {actienter code hereon: 'loginpage'}).then(function(token) {
/* Move Google Badge to your Div ID */
jQuery('.grecaptcha-badge').appendTo("#g-badge-newlocation");
});
});
EDIT1:render=explicit
パラメーターを使用して回答を参照してください。この回答は引き続き機能しますが、この機能が文書化される前であり、それほどきれいではありませんでした。
相対ボックスを配置し、その中にreCaptcha v3バッジを外すことで、まさにそれを行うことができました。次に、コンテナに対していくつかのスタイル調整が行われます。
#grecaptcha-box {
width: 260px;
overflow: hidden;
position: relative;
height: 75px;
}
#grecaptcha-box .grecaptcha-badge {
box-shadow: none !important;
}
次に、ボックスに続いてJavaScriptを配置します。
<form>
<!-- Rest of your form here... -->
<input type="hidden" id="recaptcha-token" name="recaptcha-token">
<input type="hidden" id="recaptcha-action" name="recaptcha-action">
</form>
<div id="grecaptcha-box"></div>
<!-- Recaptcha v3 -->
<script src="https://www.google.com/recaptcha/api.js?render=xxxxxxxxxxxxxxxxxxxxxxxxxxxx"></script>
<script id="js-recaptcha-init">
const RECAPTCHA_PUBLIC_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx';
grecaptcha.ready(function() {
// Remove badge from fixed place
var gb = document.getElementsByClassName("grecaptcha-badge")[0];
gb.style.position = 'absolute';
document.getElementById('grecaptcha-box').appendChild(gb.cloneNode(true));
gb.parentNode.removeChild(gb);
// Do the normal recaptcha things...
var grecaptcha_opts = {'action' : 'custom_action'};
grecaptcha.execute(RECAPTCHA_PUBLIC_KEY, grecaptcha_opts)
.then(function(token) {
document.getElementById('recaptcha-token').value = token;
document.getElementById('recaptcha-action').value = grecaptcha_opts.action;
});
});
</script>
Divセクションで設定するだけです
<div vc-recaptcha
badge="bottomleft"
>
</div>
これをsassまたはcssに含めて左に揃え、ホバー機能をアクティブに保つことができます。
.grecaptcha-badge {
width: 70px !important;
overflow: hidden !important;
transition: all 0.3s ease !important;
left: 4px !important;
}
.grecaptcha-badge:hover {
width: 256px !important;
}