Facebook javascript sdk fb_xd_fragment?
Я использую javascript sdk для facebook, чтобы вставить подобную кнопку на моей странице.
Что такое fb_xd_fragment? Я вижу, что это добавляет к концу моего URL-адреса, например http://www.example.com/controller/?fb_xd_fragment, и это вызывает некоторую неприятную рекурсивную перезагрузку страницы.
Ответы
Ответ 1
После многих недель попытки найти решение, похоже, что необходим собственный URL-адрес канала, как указано здесь:
http://developers.facebook.com/docs/reference/javascript/FB.init
Все, что я сделал, это создать файл channel.html, содержащий эту единственную строку:
<script src="http://connect.facebook.net/en_US/all.js"></script>
Затем я добавил строку channelUrl: так что итоговый результат выглядит следующим образом:
<div id="fb-root"></div> <script>
window.fbAsyncInit = function() {
FB.init({
appId : 'MY APP ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true, // parse XFBML
channelUrl : 'http://www.example.com/channel.html' // custom channel
}); };
(function() {
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());</script>
Обязательно добавьте запятую после xfbml: true, если это была ваша последняя строка. Я не знаком с Javascript, поэтому не знаю, пользуюсь ли я этим преимуществом, но я знаю, что это предотвращает проблему fb_xd_fragment и позволяет комментарии FB в IE. Насколько я могу судить, это единственное решение, доступное в Интернете. Любые дополнительные трюки приветствуются.
Ответ 2
Решено с помощью кнопки iframe.
Ответ 3
Исправление этой ошибки можно найти здесь:
http://wiki.github.com/facebook/connect-js/custom-channel-url
Ответ 4
Ссылка a1anm хороша для очистки беспорядка, который это вызывает, но есть способ предотвратить его.
Установите 'channelUrl' на локально размещенную страницу канала. Подробнее см. http://threebrothers.org/brendan/blog/facebook-connect-ie-fb_xd_fragment-iframe/.
Ответ 5
Ошибка и исправление теперь документируются на http://developers.facebook.com/docs/reference/javascript/fb.init/
Ответ 6
Я использовал подход в script, чтобы определить channelUrl на странице моего сайта, но у меня все еще есть несколько обращений к этой странице.
После просмотра результирующего трафика с помощью WireShark я заметил, что они (Facebook) используют channelUrl для некоторых своих внутренних вызовов, а также передают fb_xd_fragment - вместо этого я использовал этот URL для channelUrl, перенаправляя его с моего сайта.
У меня есть несколько кнопок Like на моем сайте с использованием fbml вместо фреймов, а на IE7 я больше не получаю удары от Facebook с параметром fb_xd_fragment.
Не уверен, что это лучшая практика, но, похоже, она работает.
Я установил это значение для channelUrl:
'http://static.ak.fbcdn.net/connect/xd_proxy.php'
Надеюсь, что это поможет.
Ответ 7
Хотя ответ выше из github кажется ответом на другой вопрос, он работает хорошо.
UPDATE: ссылка сломана - попробуйте http://blog.colnect.com/2010/10/fbxdfragment-bug-workaround.html
Ответ 8
афферентные несколько дней исследований и экспериментов со всем решением в Интернете, наконец, я придумал комбинацию этого
Измените голову своей страницы:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml" lang="en-US">
здесь cocde помещает это, где вы хотите, чтобы кнопка:
<div class="yourclass" style="z-index: 10;">
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js" ></script>
<script>FB.init({appId: '1234yourappidhere', status: true, cookie: true, xfbml: true});</script>
<fb:like href="http..yourencodedurlswillputhere" layout="button_count" width="150" action="recommend" colorscheme="light"></fb:like></div>
<script> document.getElementsByTagName('html')[0].style.display='block';</script>
кредитный доход: http://www.xaluan.com
Ответ 9
"Канал" не работал у меня.
Поэтому я просто добавил выше всего другого контента в свой PHP файл код, который 301 перенаправляет URL-адрес без добавления fb_xd_fragment:
$url = "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
if (isset($_GET['fb_xd_fragment'])) {
$url = str_replace("?fb_xd_fragment=","",$url);
header( "HTTP/1.1 301 Moved Permanently" );
header("Location: {$url}");
exit();
}