2014-06-30 92 views
0

我想創建一個函數,在提交時在Facebook上分享內容,如果複選框被選中,就像Ask.fm上的回覆表單(我現在相信你在說什麼)。我想根據這裏的一些答案如何打開復選框點擊Facebook授權彈出窗口,但事情是,我想保持未經檢查,直到用戶授權並給所有必要的權限給Facebook應用程序。更確切地說,您點擊複選框,Facebook Login彈出窗口打開,但複選框保持未選中狀態,直到您授權具有所有必需權限的應用。到現在爲止我有這樣的代碼:如果選中複選框,在Facebook牆上發佈消息

<script type='text/javascript'>//<![CDATA[ 
$(window).load(function(){ 
window.fbAsyncInit = function() { 
    FB.init({ 
    appId: 'APP_ID', 
    status: true, 
    cookie: true, 
    xfbml: true 
    }); 
}; 
(function (d) { 
    var js, id = 'facebook-jssdk', 
     ref = d.getElementsByTagName('script')[0]; 
    if (d.getElementById(id)) { 
     return; 
    } 
    js = d.createElement('script'); 
    js.id = id; 
    js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
}(document)); 


$('#checkbox').change(function() { 
if ($(this).is(':checked')) { 

    FB.login(function (response) { 
     if (response.authResponse) { 
      console.log('Welcome! Fetching your information.... '); 
      FB.api('/me', function (response) { 
       console.log('Good to see you, ' + response.name + '.'); 
      }); 
     } else { 
      alert('User canceled login or did not fully authorize the app.'); 
     } 
    }, { 
     scope: 'publish_stream,email', 
     return_scopes: true 
    }); 

} 
}); 


function fb_publish() { 
    var msg = $('#message').val(); 
FB.ui({ 
method: 'stream.publish', 
message: msg, 
attachment: { 
    name: 'Name here', 
    caption: 'Caption here.', 
    description: (
    'description here' 
    ), 
    href: 'url here' 
}, 
action_links: [ 
    { text: 'Code', href: 'action url here' } 
], 
user_prompt_message: 'Personal message here' 
    }, 
    function(response) { 
    if (response && response.post_id) { 
     alert('Post was published.'); 
    } else { 
     alert('Post was not published.'); 
    } 
     } 
    ); 
    } 

}); 
</script> 

<form onsubmit="fb_publish()"> 
    <input type="checkbox" name="facebook" value="1" id="checkbox" />Facebook 
    <label for="Message">Message</label> 
    <input name="message" id="message" type="text" /> 
    <input type="submit" value="post" /> 
</form> 

回答

1

試試這個代碼:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Facebook Login</title> 
    <script src="jquery-1.11.1.min.js"></script> 
    <script type='text/javascript'> 
     var perms = ['public_profile', 'email']; 
     var declined_perms = []; 
     $(window).load(function() { 
      window.fbAsyncInit = function() { 
       FB.init({ 
        appId: 'XXXXXXXX', 
        status: true, 
        cookie: true, 
        xfbml: true 
       }); 
       checkLoginState(); 
      }; 
      (function (d) { 
       var js, id = 'facebook-jssdk', 
         ref = d.getElementsByTagName('script')[0]; 
       if (d.getElementById(id)) { 
        return; 
       } 
       js = d.createElement('script'); 
       js.id = id; 
       js.async = true; 
       js.src = "//connect.facebook.net/en_US/all.js"; 
       ref.parentNode.insertBefore(js, ref); 
      }(document)); 


      $('#checkbox').change(function() { 
       if ($(this).is(':checked')) { 
        if (parseFloat($(this).val())) { 
         customLogin(); 
        } else { 
         rerequest(); 
        } 

       } 
      }); 

      function statusChangeCallback(response) { 
       console.log('statusChangeCallback'); 
       console.log(response); 
       // The response object is returned with a status field that lets the 
       // app know the current login status of the person. 
       // Full docs on the response object can be found in the documentation 
       // for FB.getLoginStatus(). 
       if (response.status === 'connected') { 
        // Logged into your app and Facebook. 
        testAPI(); 
       } else if (response.status === 'not_authorized') { 
        // The person is logged into Facebook, but not your app. 

       } else { 
        // The person is not logged into Facebook, so we're not sure if 
        // they are logged into this app or not. 

       } 
      } 

      function checkLoginState() { 
       FB.getLoginStatus(function (response) { 
        statusChangeCallback(response); 
       }); 
      } 

      function rerequest() { 
       FB.login(
         function (response) { 
          testAPI(); 
         }, 
         { 
          scope: declined_perms.join(), 
          auth_type: 'rerequest' 
         } 
       ); 
      } 

      function customLogin() { 
       FB.login(
         function (response) { 
          testAPI(); 
         }, 
         { 
          scope: perms.join() 
         } 
       ); 
      } 

      function testAPI() { 
       declined_perms.length = 0; 

       FB.api('/me/permissions', function (response) { 
        var responsePerms = []; 
        for (var i = 0; i < response.data.length; i++) { 
         responsePerms.push(response.data[i].permission) 
         if (response.data[i].status == 'declined') { 
          declined_perms.push(response.data[i].permission); 
         } 
        } 
        for (var _i = 0, _j = perms.length; _i < _j; _i++) { 
         if (responsePerms.indexOf(perms[_i]) < 0) { 
          declined_perms.push(perms[_i]); 
         } 
        } 

        if (declined_perms.length) { 
         alert('User canceled login or did not fully authorize the app.'); 
         console.log('Please Provide access to ' + declined_perms.join()); 
         document.getElementById('checkbox').checked = false; 
         document.getElementById('checkbox').value = 0; 
        } else { 
         document.getElementById('checkbox').checked = true; 
         console.log('Welcome! Fetching your information.... '); 
         FB.api('/me', function (response) { 
          console.log('Successful login for: ' + response.name); 
         }); 
        } 
       }); 


      } 


      function fb_publish() { 
       var msg = $('#message').val(); 
       FB.ui({ 
          method: 'stream.publish', 
          message: msg, 
          attachment: { 
           name: 'Name here', 
           caption: 'Caption here.', 
           description: (
             'description here' 
             ), 
           href: 'url here' 
          }, 
          action_links: [ 
           { text: 'Code', href: 'action url here' } 
          ], 
          user_prompt_message: 'Personal message here' 
         }, 
         function (response) { 
          if (response && response.post_id) { 
           alert('Post was published.'); 
          } else { 
           alert('Post was not published.'); 
          } 
         } 
       ); 

      } 

     }); 
    </script> 
</head> 
<body> 
<form onsubmit="return fb_publish()"> 
    <input type="checkbox" name="facebook" value="1" id="checkbox"/>Facebook 
    <label for="Message">Message</label> 
    <input name="message" id="message" type="text"/> 
    <input type="submit" value="post"/> 
</form> 
</body> 
</html> 
+0

我不斷收到這樣的信息:「用戶取消登錄或沒有完全授權的應用程序」 – Alexander

+0

你完全替換了代碼並試過了嗎? –

相關問題