Не удается получить обратный вызов 'edge.create' для работы с javascript SDK facebook - PullRequest
1 голос
/ 12 мая 2011

Я пытаюсь использовать функцию обратного вызова 'edge.create' в javascript SDK Facebook, чтобы отправить предупреждение, когда пользователь нажимает кнопку «Нравится» на странице. В конечном итоге моя цель состоит в том, чтобы он обновлял стили на странице, чтобы при нажатии на них можно было динамически изменять размер div виджета facebook. Я не могу заставить работать обратный вызов даже для предупреждения.

<html lang="en">
<head>
    <title></title>
    <script   src="http://connect.facebook.net/en_US/all.js#appId=216985861663967&amp;xfbml=1"></script>
    <script>
        FB.Event.subscribe('edge.create', function() {
            alert('Liked');
        });
    </script>
</head>
<body>
<div id="fb-root"></div>
<fb:like send="false" layout="button_count" show_faces="false" font=""></fb:like>

</body>
</html>

Есть идеи, почему это не работает? При нажатии кнопки выдается ошибка:

Небезопасная попытка JavaScript получить доступ к фрейму с URL

и более поздние версии говорят, что домены, протоколы и порты должны совпадать.

Ответы [ 3 ]

2 голосов
/ 23 июля 2011

Из вашего описания я предполагаю, что вы тестируете в Chrome / Safari на локальном сервере?

Chrome / Safari

Попробуйте установить URL-адрес кнопки «Мне нравится» на существующий веб-адрес:

<fb:like href="http://google.com" ...

Важным примечанием является то, что оповещение зависит от успеха лайка, который зависит от того, какой URL-адрес доступен для Facebook.Вам не удастся понравиться URL-адрес, существующий только на вашем локальном сервере (например, http://localhost:3000/my-page.html). Очевидно, что Google нравится - это тестовое исправление; вместо этого вы можете отправить свой код на промежуточный сервер для того же эффекта, ноэто займет больше времени и усилий.

Когда я внесу это изменение, кнопка «Мне нравится» и оповещение будут работать в Chrome 12 для Mac, но я по-прежнему вижу ту же ошибку, что и вы. Я думаю, что Chrome чувствителен только к iframes;сомневаюсь, что ошибки можно избежать.

Firefox

Если я внесу указанное выше изменение, оно все равно не будет работать в Firefox 5 для Mac. Я получаю ошибку e.root is undefined от всех пользователей Facebook.js и кнопка «Мне нравится» даже не отображаются.

Если переместить сценарии all.js и FB.Event.subscribe() ниже элемента fb-root, появится кнопка «Мне нравится», и предупреждение сработает без ошибок.

Internet Explorer

Согласно документации Facebook вам необходимо добавить пространство имен XML Facebook в ваш тег <html>, чтобы кнопка отображалась в Internet Explorer:

<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
0 голосов
/ 29 октября 2012

Вы не можете использовать alert() в приложении Facebook, по крайней мере, не в Chrome (если Firefox все еще позволяет это, они, вероятно, не будут работать намного дольше).

Вместо этого используйте console.log()и откройте консоль Javascript для просмотра отправляемых сообщений.

0 голосов
/ 04 ноября 2011

Вы должны указать свой идентификатор приложения. Если у вас все еще нет приложения, просто создайте его в разделе для разработчиков на Facebook.

Пример:

<script>
    window.fbAsyncInit = function() {
        FB._https = true;
        FB.init({appId: 'YOURAPP', status: true, cookie: true, xfbml: true, channelURL : 'http://www.YOURSITE/channel.html'});
        FB.Event.subscribe('edge.create', function(response) {
            alert('Liked');
        });
    };
</script>

P.S. Внутри http://www.YOURSITE/channel.html файла, поместите следующий ряд -

<script src="http://connect.facebook.net/en_US/all.js"></script>
...