次のように、標準の HTML リンクタグの「onclick」アクションに含まれている場合に正常に実行される JS 関数を作成しました。
<a href="#" onclick="return fb_CheckPermission('publish_stream');">test</a>
ただし、この関数を実際に使用したいのはフォームの「onsubmit」アクションですが、次のように含めると、関数が実行されていないようです:
<form action="page.pl" id="disable-submit" name="status-form" method="POST" onsubmit="return fb_CheckPermission('publish_stream');">
'fb_CheckPermission()' JS 関数が基本的に行うことは、Facebook Connect を使用して、ユーザーが特定の許可を与えていることを確認し、そうでない場合は、Facebook Connect にユーザーに許可を与えるように促すことです。JS 関数のコードは次のとおりです。
1. function fb_checkPermission(permission) {
2. FB.ensureInit(function() {
3. FB.Facebook.apiClient.users_hasAppPermission(permission, function (hasPermissions) {
4. if(!hasPermissions){
5. FB.Connect.showPermissionDialog(permission,function (status){
6. if(!status) {
7. if(permission == 'offline_access') {
8. // save session
9. }
10. }
11. });
12. }
13. });
14. });
15.}
このコードが行うことは次のとおりです。
Line 2: Make sure Facebook Connect JS library is loaded
Line 3: Checks to see if the current Facebook Connect user has granted a specific permission
Line 5: If the permission hasn't been granted then prompt the user with the permission dialog
Line 7: In the case of the 'offline_access' permission save the session key once granted
私が達成しようとしているユーザー エクスペリエンスは、ユーザーがフォームを送信するときに、特定の権限を付与しているかどうかを確認し、そうでない場合はフォームを送信する前に権限を求めるプロンプトを表示することです。ユーザーがすでに許可を与えている場合、フォームは送信するだけです。プロンプトが表示されたユーザーの場合、許可を付与することを選択した後、または fb_checkPermission() JS 関数が現在正しく処理していると私が信じている要求を拒否した場合は、フォームを送信する必要があります。よくわからないのは、これがフォーム送信でどのように機能するかについて、何らかの JavaScript の問題があるかどうかです。
前述したように、この JS 関数は onclick アクションとしては完全に機能しますが、onsubmit アクションとしては失敗するため、これは JavaScript が onsubmit アクションを処理する方法と関係があると確信しています。
私は立ち往生しているので、JS 関数を変更して希望するユーザー エクスペリエンスを実現する方法を理解するのに本当に感謝しています。よろしくお願いします。