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

Asynchronous FB.ui()在Safari中,当用户尚未登录时发出异步请求时出错,asynchronous,safari,facebook-javascript-sdk,Asynchronous,Safari,Facebook Javascript Sdk,我试图让用户能够在我的外部网站上发布他们的Facebook墙 我在Safari遇到了一个问题。如果用户没有登录,也就是说,他们没有通过调用FB.login()的流程,那么在调用FB.ui()时会出现以下JS错误: TypeError:“undefined”不是对象(正在计算“b.fbCallID=a.id”) 但是,如果他们已登录,则该对话框将正常显示 在回调函数中调用FB.ui()——我从服务器检索一个唯一的url,然后调用FB.ui()。如果我直接调用FB.ui(),它可以正常工作,但当它是

我试图让用户能够在我的外部网站上发布他们的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
                }
            });
        });

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

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

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

TypeError:“undefined”不是对象(正在计算“b.fbCallID=a.id”)


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

不,绝对不能。我需要我的服务器先生成一个唯一的代码。我只是做了重定向,而不是使用FB.ui(),所以没关系。也许页面可以生成唯一的代码?无聊的。转向别处!