Web サイトに Facebook 登録を実装しようとしています。onvalidate パラメーターがないと、すべてが期待どおりに機能しますが、それを含めると、すべてが壊れているように見えます (エラーはスローされず、フォームは何もしません)。
これが私のコードです:
<center>
<fb:registration redirect-uri="http://im.localhost/register"
fields='[{"name":"name"},{"name":"username","description":"Website Username","type":"text"},{"name":"email"},{"name":"password","view":"not_prefilled"},{"name":"captcha","view":"not_prefilled"},{"name":"tos","type":"checkbox","description":"I accept the Terms of Service"}]' onvalidate='validate'>
</fb:registration>
</center>
<script>
function validate(form) {
console.log('Validation');
errors = {};
errors.tos = "You must accept the terms of service";
return errors;
}
</script>
<!-- at end of page: -->
<script>
// ...
FB.init({
appId: '<?php echo IM_Facebook::getAppIDStatically(); ?>',
channelUrl: '<?php echo $this->serverUrl().$this->baseUrl('/xsrd.html'); ?>',
status: true,
cookie: true,
xfbml: true
});
// ...
</script>
console.log 関数は、フォームの送信ボタンを押しても呼び出されません。(ただし、それ以外の場合はほぼ正常に動作します。「abc を使用して登録しました」というポップアップが表示され、確認をクリックすると消えますが、それ以外は何も起こりません。
このパラメーターを指定せずにカスタム フィールド (ユーザー名) を空白のままにすると、Facebook から入力を求められます。このパラメーターを空白のままにすると、検証関数は呼び出されず、エラーは表示されません。いずれにせよ、このフォームに従って常に表示されるはずの TOS エラーは表示されません。
同様の質問の問題には、Web サイトの URL がアプリケーションの URL と一致しないことが含まれます。この場合、そうではありません。
ドメインを明確にするために、インターネット経由でアクセスできないドメイン「im.localhost」を使用しています。これは問題ではないと思います。なぜなら、onvalidate がなくても登録フォームが機能し、実装したログイン システムが機能するからです。ただし、onvalidate を使用すると、登録フォームはまったく機能しなくなります。