Не удается получить обратный вызов edge.create для работы с facebook javascript SDK

#facebook #facebook-javascript-sdk

#Facebook #facebook-javascript-sdk

Вопрос:

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

 <html lang="en">
<head>
    <title></title>
    <script   src="http://connect.facebook.net/en_US/all.js#appId=216985861663967amp;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

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

Ответ №1:

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

Chrome / Safari

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

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

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

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

Firefox

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

Если я перемещаю скрипты all.js и FB.Event.subscribe() под fb-root div, появляется кнопка «Мне нравится», и оповещение работает без ошибок.

Internet Explorer

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

 <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
  

Ответ №2:

Вы должны указать свой идентификатор приложения. Если у вас все еще нет какого-либо приложения, просто создайте его в разделе 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>
  

PS Внутри http://www.YOURSITE/channel.html файл, поместите следующую строку —

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

Ответ №3:

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

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