【问题标题】:Facebook Posts are revealed after refreshing the page: Javascript刷新页面后显示 Facebook 帖子:Javascript
【发布时间】:2017-10-03 12:37:10
【问题描述】:

经过努力,我终于找到了我想要实现的解决方案。我已经成功地将 Facebook 的帖子与我的应用程序集成在一起。

但只有一个问题。我想在该人登录后在文本区域中发布帖子。但是除非我刷新网站的页面,否则我看不到帖子。

这是我要执行的代码:

<div id="fb-root"></div>
<script>
function getUserData() {
    FB.api('/me', {fields: 'email, posts'}, function(response) {
        document.getElementById('for_analysis').innerHTML = 'Hello ' + response.posts.data[0].message;

    });
}

window.fbAsyncInit = function() {
    //SDK loaded, initialize it
    FB.init({
        appId      : 'MyID',
        xfbml      : true,
        version    : 'v2.10'
    });

    //check user session and refresh it
    FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            //user is authorized
            //document.getElementById('loginBtn').style.display = 'none';
            getUserData();

        } else {
            //user is not authorized
            document.getElementById('for_analysis').innerHTML = '';
        }
    });
};


//load the JavaScript SDK
(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.com/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

//add event listener to login button
document.getElementById('loginBtn').addEventListener('click', function() {
    //do the login
    FB.login(function(response) {
        if (response.authResponse) {
            //user just authorized your app
            //document.getElementById('loginBtn').style.display = 'none';
            getUserData();
            //document.location.reload(true)
        }
    }, {scope: 'email,user_posts', return_scopes: true});
}, false);

</script>
<div class="fb-login-button" data-max-rows="2" data-size="large" data-button-type="continue_with" data-show-faces="false" data-auto-logout-link="true" data-use-continue-as="true" data-scope = "email,user_posts"></div>

请告诉我,在用户登录后我需要做什么才能使内容可见。

我尝试在使用命令window.location.reload() 执行getUserData() 后重新加载页面,也尝试过:window.location.reload(true)document.location.reload()document.location.reload(true)

但页面并没有停止刷新,因此忽略了重新加载部分。

如果有的话,请提出更好的解决方案。

【问题讨论】:

  • 如果你用location.reload();替换getUserData();(在点击事件处理程序中),它不应该继续重新加载页面。
  • @Archer 对不起,我没有明白你的意思。请问你能帮帮我吗?
  • 不需要使用 javascript 自动重新加载页面...
  • ..并且请不要在页面加载时调用的函数中使用 javascript 重新加载页面......当然这是一个无限循环。

标签: javascript html facebook facebook-graph-api


【解决方案1】:

您正在使用FB.login 和登录按钮。使用您自己的按钮并自行致电FB.login。现在你甚至没有使用FB.login,只有登录按钮,登录成功后没有任何回调。

或者,您可以使用登录按钮的onlogin 回调而忘记FB.loginhttps://developers.facebook.com/docs/facebook-login/web/login-button/#settings

【讨论】:

  • 投反对票?为什么?我的回答是 100% 正确的......请说明是否缺少某些内容。
  • 我尝试了您网站上的 javascript:devils-heaven.com/facebook-javascript-sdk-login ...。我认为它会起作用,但正如您在我的问题中看到的那样。我也尝试修改 t。
  • 您没有使用我网站上的 js,我没有使用那里的官方登录按钮;)请阅读我的回答,这绝对是问题所在,并且 100% 正确。
  • 我的意思是...“document.getElementById('loginBtn')”...您甚至没有 ID 为“loginBtn”的按钮...只需创建一个 div 或按钮该 id 并删除当前的(使用“fb-login-button”类)。
  • 好的,我尝试删除侦听器部分并将其替换为我称为onlogin 事件的登录函数。但是现在注销后,我得到了登录对话框。我不明白这是什么问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 2019-08-24
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多