簡體   English   中英

Fb.api發布未定義為留言牆

[英]Fb.api posting undefined on as wall post

我想將HTML id的值作為消息發布在我的Facebook牆上。 發布到Facebook是可行的,但是FB最終由於將值傳遞給message:而未定義寫入。 我正在使用var word = document.getElementById("fb-root").value; 獲取值,但fb.api值變成未定義。

請參見下面的代碼:

 <html>
   <head>
     <title>My Facebook Login Page</title>
     <script type="text/javascript">
       function postToWall() {
       var word   = document.getElementById("fb-root").value;
       var params = {};
       params['message'] = word;
       params['name'] = 'test';
       params['description'] = 'test';
       params['link'] = 'asas.com';
       params['picture'] = 'http://3.bp.blogspot.com/--jbgq-gytJQ/URaJHK_93LI/AAAAAAAAAF0/SkyoK7H3r7U/s1600/Simple+Apple.png';
  params['caption'] = 'test';

    FB.api('/me/feed', 'post', params, function(response) {
      if (!response || response.error) {
        alert('Error occured');
      } else {
        alert(word);
      }
    });
  }
  </script>

 <div id="fb-root">test</div>
  <script>
  window.fbAsyncInit = function() {
  FB.init({
  appId : 'test', 
  status : true,
  cookie : true,
 xfbml : true, 
  oauth : true
 });
  };
 // Load the SDK Asynchronously
 (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));
 </script>
 </head>
        <body>
     <div id="fb-root">tests</div>
    <script src="http://connect.facebook.net/en_US/all.js"></script>
    <script>
    FB.init({ 
      appId:<fbapp-id>, cookie:true, 
      status:true, xfbml:true
    });
    </script>
        <fb:login-button perms="publish_stream">Login with Facebook</fb:login-button>
        <a href="javascript:postToWall()">Post To Wall</a>
       </body>
 </html>

檢查代碼(搞砸了)后,您需要注意以下幾點,

一切都是重復的

  • 在HTML中,一個id不能有多個元素,在這里, id只能是2個元素fb-root

     <div id="fb-root">test</div> 
  • 您將異步加載兩次JS-SDK;

     // Load the SDK Asynchronously (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)); 

    其他同步(使用<script>

     <script src="http://connect.facebook.net/en_US/all.js"></script> 
  • 您兩次調用FB.init()

  • 您將fb-root元素之一放在head標簽中,這在HTML中是一種罪過;)

  • 當您實例化Facebook應用程序時, <div id="fb-root"></div>從DOM中刪除,它就像一個虛擬元素,但對Facebook很重要,不是您本人,您應該始終保留它而不使用它,而是創建一個具有不同id的新元素,例如myWord <div id="myWord">my word</div>盡管div不是內聯元素,這會帶來不好的習慣。

這是您清除的代碼;

<html>
    <head>
        <title>My Facebook Login Page</title>
        <script type="text/javascript">
            function postToWall() {

                var word   = document.getElementById("myWord").value;
                var params = {};
                params['message'] = word;
                params['name'] = 'test';
                params['description'] = 'test';
                params['link'] = 'asas.com';
                params['picture'] = 'http://3.bp.blogspot.com/--jbgq-gytJQ/URaJHK_93LI/AAAAAAAAAF0/SkyoK7H3r7U/s1600/Simple+Apple.png';
                params['caption'] = 'test';

                FB.api('/me/feed', 'post', params, function(response) {
                  if (!response || response.error) {
                    alert('Error occured');
                  } else {
                    alert(word);
                  }
                });

            }
            window.fbAsyncInit = function() {
                FB.init({
                    appId  : '{App_id}', 
                    status : true,
                    cookie : true,
                    xfbml  : true, 
                    oauth  : true
                });
            };
            // Load the SDK Asynchronously
            (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));
        </script>
    </head>
    <body>
        <div id="fb-root"></div>
        <fb:login-button perms="publish_stream">Login with Facebook</fb:login-button>
        <a href="javascript:postToWall()">Post To Wall</a>
    </body>
 </html>

的document.getElementById( “myWord” 的)。值

需要更改為

的document.getElementById( “myWord” 的)。innerHTML的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM