Facebook发布到新闻源不显示FB没有定义

时间:2012-11-22 09:55:00

标签: javascript facebook facebook-javascript-sdk facebook-sharer

我试图发布到facebook新闻源并且弹出框不会不时出现。 我认为这与回发或其他东西有关。 这是怎么回事: 用户再见一些东西,然后在弹出窗口中发送给Payson(payson是瑞典版的Paypal),然后payson将用户发送回我的页面仍然在弹出窗口中。 这是一个运行的代码:

function postToFeed() {

try {
    FB.getLoginStatus(function (response) {
        if (response.status === 'connected') {

            var obj = {
                method: 'feed',
                link: 'link',
                picture: 'imagelink',
                name: 'title',
                caption: 'some text...',
                description: 'some text...',
                redirect_uri: 'url'
            };

            function callback(response) {
                document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
            }

            FB.ui(obj, callback);
        }
        else {
            alert("not connected")
        }
    });

} catch (e) {
    alert(e.Message)
}
 }

现在发生的是我从try catch中得到错误,而且只是说 FB未定义

如果我之后使用按钮运行此功能,它的工作正常。 如果我伪造来自payson的回发它也可以工作,但如果我在新窗口中这样做则不行。

我试图将FB.init函数放在我的函数中,但这没有帮助。

感谢您的帮助!

新代码

这是在.js文件中

var isLoaded = false;
window.fbAsyncInit = function () {
FB.init({
    appId: '00000000', // App ID
    channelUrl: 'url', // Channel File
    status: true, // check login status
    cookie: true, // enable cookies to allow the server to access the session
    xfbml: true,  // parse XFBML
    oauth: true // enable OAuth
});

isLoaded = 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));

   (function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/sv_SE/all.js#xfbml=1&appId=503537396325197";
fjs.parentNode.insertBefore(js, fjs);
 } (document, 'script', 'facebook-jssdk'));


FB.init({ appId: "000", status: true, cookie: true });


   function postToFeed() {

    var obj = {
        display: 'iframe',
        method: 'feed',
        link: 'url',
        picture: 'url',
        name: 'text',
        caption: 'text',
        description: 'text',
        redirect_uri: 'url'
    };

    function callback(response) {
        document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
    }

    FB.ui(obj, callback);
   }


   function init() {
    FB.init({
    appId: '00000',
    status: true, // check login status
    cookie: true, // enable cookies to allow the server to access the session
    xfbml: true, // parse XFBML
    channelUrl: 'url', // custom channel
    oauth: true // enable OAuth
     });

    FB.getLoginStatus(function (response) {
    if (response.status == 'connected') {
        var user_id = response.authResponse.userID;
        var access_token = response.authResponse.accessToken
        var page_id = "00000"; //page id
        var fql_query = "SELECT uid FROM page_fan WHERE page_id =" + page_id + " and uid=" + user_id;
        var the_query = FB.Data.query(fql_query);

        the_query.wait(function (rows) {

            if (rows.length == 1 && rows[0].uid == user_id) {
                $("#container").show();
                $("#container_notlike").hide();
                $("#notloggedin").hide();

            }

            else {
                $("#container_notlike").show();
                $("#container").hide();
                $("#notloggedin").hide();

                login();
            }
        });
    } else {
        $("#container_notlike").hide();
        $("#container").hide();

        login();

    }
     });

     }

      init();

       // whenever the user logs in, we refresh the page
     FB.Event.subscribe('auth.login', function (response) {
     top.location.href = "url";
   });


    FB.Event.subscribe('auth.logout', function (response) {
      top.location.href = "url";
     });




      function login() {
     FB.login(function (response) {
        if (response.authResponse) {
        console.log('Logged in');
        } else {
        console.log('User cancelled login or did not fully authorize.');
        }
       }, { scope: 'email,user_likes,publish_actions' });
       }



    function likereload() {

    FB.Event.subscribe('edge.create', function (response) {

      top.location.href = "url"
       });

   }


    function getuserinfo() {

       FB.getLoginStatus(function (response) {
          if (response.authResponse) {

           FB.api('/me', function (response) {
            document.getElementById("txtfName").value = response.first_name;
            document.getElementById("txtlName").value = response.last_name;
            document.getElementById("txtemail").value = response.email;

            });

         }
      });


       }

2 个答案:

答案 0 :(得分:0)

“FB未定义”表示您未加载/初始化JavaScript SDK。

  

https://developers.facebook.com/docs/reference/javascript/

有关如何使用JavaScript SDK的示例,请参阅“加载和初始化”,不要在自定义函数中添加任何内容。

此外,您不需要“getLoginStatus”,Feed对话框也可以在没有用户登录的情况下工作,因此调用“getLoginStatus”是没有意义的,只需要时间。我也会删除try / catch块,你不需要它。

答案 1 :(得分:0)

我解决了这个问题,

window.setTimeout('postToFeed()', 3000);

然后在我调出Feed对话框之前,所有的Facebook代码都有时间加载