Как я могу заставить новый Javascript SDK Facebook работать в IE8? - PullRequest
10 голосов
/ 09 июня 2010

Я свел свою страницу к самой простой вещи, и она все еще не работает в IE8.

Вот вся HTML-страница:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
<head></head>
<body>
<div id="fb-root"></div>
<fb:login-button></fb:login-button>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
  FB.init({appId: 'd663755ef4dd07c246e047ea97b44d6a', status: true, cookie: true, xfbml: true});
  FB.Event.subscribe('auth.sessionChange', function(response) {
    alert(JSON.stringify(response));
  });
  FB.getLoginStatus(function (response) { alert(JSON.stringify(response)); });
</script>
</body>
</html>

В Firefox, Safari и Chrome (на Mac) я получаю ожидаемое поведение: если я не вошел в Facebook, при загрузке страницы появляется диалог с пустой сессией. Когда я нажимаю кнопку «Вход» и регистрируюсь, я получаю второй диалог с сеансом. Если я вошел в Facebook, я получаю два диалога с сессиями: один из вызова getLoginStatus, а другой из события.

В IE8 я не получаю диалогов при загрузке страницы. Обратный вызов getLoginStatus не вызывается. Когда я нажимаю кнопку «Вход», я получаю диалоговое окно, но в нем есть очень странная ошибка:

Неверный аргумент

междоменный домен Facebook Connect URL получателя (http://static.ak.fbcdn.net/connect/xd_proxy.php#?=&cb=f3e91da434653f2&origin=http%3A%2F%2Fmysiteurl.com%2Ff210cba91f2a6d4&relation=opener&transport=flash&frame=f27aa957225164&result=xxRESULTTOKENxx) должен иметь приложение Connect URL (http://mysiteurl.com/) как префикс. Вы можете настроить подключение URL в настройках приложения Редактор.

Я очистил URL-адрес подключения выше, но это правильно.

В диалоговом окне есть поля с именем пользователя и паролем. Если я вхожу в систему, диалоговое окно перенаправляется на мой URL-адрес Connect, но нет файла fb cookie, поэтому, конечно, ничего не работает.

Что я здесь не так делаю?

Обновление (10 сентября 2010 г.):

Эта проблема не универсальна. URL моего сайта содержит номер порта, потому что это мой тестовый сайт: http://mysiteurl.com:12345. без порта число, т.е. 8, кажется, в порядке. С номером порта он продолжает потерпеть неудачу, как это было раньше. Тем не менее, сообщение об ошибке теперь более кратко:

Неверный аргумент

Данный URL не разрешен конфигурацией приложения

Кроме того, эта проблема специфична для IE (на самом деле, я подозреваю, что она специфична для транспорта Flash XD, но я не знаю, как это подтвердить). Он отлично работает на любой другой паре платформа / браузер, которую я пробовал.

Я все еще не близок к тому, чтобы сделать эту работу с URL-адресом с номером порта.

Ответы [ 5 ]

1 голос
/ 19 августа 2011

Попробуйте передать параметр channelUrl в вашу функцию FB.init и создайте файл channel.html, как предлагается по ссылке ниже:

https://developers.facebook.com/docs/reference/javascript/

0 голосов
/ 16 июля 2011

Если ваша проблема возникает только при запуске вашего сайта на порту, отличном от порта 80, у вас есть ответ: запустите его только на порту 80. Варианты этого вопроса / проблемы снова и снова возникают при разработке приложений Facebook, где люди запустите их тестовый сайт или сайт разработчика на порту, отличном от порта 80. Подключитесь и запустите его на порту 80!

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

Есть ли у вас законные причины, по которым вы должны использовать альтернативный номер порта? На самом деле совсем не сложно запустить столько портов, сколько вы хотите, все на порту 80.

0 голосов
/ 16 октября 2010

Я часами возился со своим кодом, пытаясь понять это. Моя ситуация немного отличается, но я чувствую, что это может быть из-за той же проблемы:

Каждый раз, когда я выполняю команды в соответствии с функцией FB.Event.Subscribe, IE8 будет выполнять всю мою команду до , когда событие триггера действительно изменилось (например, когда подписано на 'auth.login', cb функция будет выполняться до того, как пользователь введет свое имя пользователя и пароль). Конечно, мои функции обратного вызова зависели от данных, необходимых после , когда пользователь вошел в систему.

Я тестирую в IE, Firefox и Chrome, и IE - единственный браузер, который доставляет мне неприятности. У меня также есть мой тестовый сайт, работающий под портом, отличным от 80, но я еще не пробовал использовать специальную диагностику, чтобы точно определить проблему, хотя я вполне уверен, что это связано с этим.

Надеюсь, это поможет любому, имеющему подобные проблемы, хотя бы знать о других возможных проблемах. Надеюсь вскоре найти ответ или обходной путь!

0 голосов
/ 08 марта 2011

У меня была такая же проблема с IE. Прекрасно работает в Firefox и Chrome. Но потом я просто понял это.

В настройках приложения Facebook на вкладке "Веб-сайт" я уверен, что у вас заполнен "URL-адрес сайта", но теперь вам нужно заполнить поле "Домен сайта" под ним, и оно будет работать для IE.

Я не знаю, ПОЧЕМУ без этого поля оно все еще работает для браузеров, отличных от IE, не имеет никакого смысла в конце Facebook.

0 голосов
/ 14 августа 2010

Они ДЕЙСТВИТЕЛЬНО должны опубликовать это.Но при работе на локальном сервере с произвольным портом, например, 8080, вы ДОЛЖНЫ использовать 127.0.0.1, а НЕ localhost, иначе он не будет работать в IE.ТАКЖЕ убедитесь, что ваш URL для подключения в настройках приложения facebook установлен на 127.0.0.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...