#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, чтобы просмотреть отправляемые сообщения.