当用户尚未登录时,FB.ui()在Safari中发出异步请求错误

pri*_*ear 5 safari asynchronous facebook-javascript-sdk

我试图让用户能够在我的外部网站上发布他们的Facebook墙.

我在Safari中遇到了问题.如果用户未登录,即他们没有通过调用FB.login()的流程,则在调用FB.ui()时会出现以下JS错误:

TypeError:'undefined'不是对象(评估'b.fbCallID = a.id')

但是,如果他们已登录,则对话框显示正常.

在回调函数中调用FB.ui() - 我从服务器检索一个唯一的url,然后调用FB.ui().如果我直接调用FB.ui(),它可以正常工作,但不是异步时.

这是代码:

        retrieveUrl(param1, param2, function(result) {
            FB.ui({ method:  'feed',
                    description: 'My Description',
                    display: 'dialog',
                    link:    result.uniqueUrl,
                    picture: 'http://foo.com/bar.jpg'
            }, function(response) {
                if (response && response.post_id) {
                    //Posted message
                } else {
                    //Not posted message
                }
            });
        });
Run Code Online (Sandbox Code Playgroud)

这适用于其他浏览器,无论是否登录状态.

fun*_*rob 4

必须在 Safari 中的用户启动操作(单击)上调用 FB.login 或 FB.ui 方法,以便 FB.UIServer 呈现新窗口/弹出窗口/iframe。

如果您尝试在网络回调事件上调用这些方法,它将被阻止并且您所描述的异常将会发生:

类型错误:“未定义”不是对象(评估“b.fbCallID = a.id”)

您能否在用户与页面交互之前检索唯一的 URL,然后在用户单击按钮时显示提要对话框?