Я решил опустить authResponse
кэширование и каждый раз звонить FB.login()
.Он ненадолго открывает всплывающее окно, но, по крайней мере, нет случая, когда пользователь вышел из системы на другой вкладке или в другом окне, а кэшированный authResponse
устарел.Коротко мигающее всплывающее окно не является большой проблемой, так как я не думаю, что пользователи все равно будут использовать одну и ту же страницу несколько раз.
Вот мой окончательный код, который даже проще, чем оригинальный:
<button id="fb-publish">Share to Facebook</button>
<script type="text/javascript">
(function() {
FB.init({
appId: MY_FACEBOOK_APP_ID, cookie: true, status: true, xfbml: true, oauth: true
});
var fbShare = function() {
FB.ui({
method: "feed",
display: "iframe",
link: "http://example.com/",
caption: "Example.com",
description: "Here is the text I want to share.",
picture: "http://example.com/image.png"
});
};
$("#fb-publish").click(function() {
FB.login(function(response) {
if (response.authResponse) {
fbShare();
}
}, {scope: 'publish_stream'});
});
})();
</script>
И, как упоминал Толга Арикан, если для вас нормально, что диалоговое окно обмена открывается во всплывающем окне, вам даже не нужно звонить FB.login()
и запрашивать разрешение publish_stream
;просто позвоните FB.ui({ method: "feed" })
напрямую, и все готово:
<button id="fb-publish">Share to Facebook</button>
<script type="text/javascript">
(function() {
FB.init({
appId: MY_FACEBOOK_APP_ID, cookie: true, status: true, xfbml: true, oauth: true
});
$("#fb-publish").click(function() {
FB.ui({
method: "feed",
link: "http://example.com/",
caption: "Example.com",
description: "Here is the text I want to share.",
picture: "http://example.com/image.png"
});
});
})();
</script>