FB.ui () выдает ошибку в Safari с асинхронным запросом, когда пользователь еще не вошел в систему - PullRequest
5 голосов
/ 09 сентября 2011

Я пытаюсь, чтобы пользователи могли публиковать сообщения в своих стенах Facebook на моем внешнем сайте.

Я столкнулся с проблемой в Safari. Если пользователь не вошел в систему, то есть он не прошел через поток, который вызывает FB.login (), я получаю следующую ошибку JS при вызове FB.ui ():

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
                }
            });
        });

Это работает в других браузерах, независимо от того, вошли они в систему или нет.

1 Ответ

4 голосов
/ 05 октября 2011

Методы FB.login или FB.ui должны вызываться для инициированного пользователем действия (щелчка) в Safari, чтобы новое окно / popup / iframe отображалось с помощью FB.UIServer.

Если вы попытаетесь вызватьметоды для события обратного вызова в сети будут заблокированы, и возникнет исключение, которое вы описали:

TypeError: 'undefined' не является объектом (оценка 'b.fbCallID = a.id')

Можете ли вы получить уникальный URL-адрес до того, как пользователь будет взаимодействовать со страницей, а затем представить диалоговое окно канала, когда они нажмут на кнопку?

...