Ошибки междоменных сценариев только для Chrome в приложении Facebook iFrame на FB.Login (..) - PullRequest
7 голосов
/ 23 февраля 2011

В Google Chrome (я на 9.0.597.98) мое приложение Facebook iFrame , использующее Graph API / Javascript SDK, обычно выдает следующие две ошибки JavaScript (см. Ниже), основанные на междоменных сценариях, но только на одной странице приложения.

Идет бесконечный цикл повторов второго сообщения.После того, как он оставил его на ночь, к утру он сообщил о полумиллионе повторных попыток!

Используется вызов FB для входа в систему:

FB.login(function(response) {
  if (response.session) {
    // user successfully logged in
  } else {
    // user cancelled login
  }
});

В Firefox и IE9 я не получаю эти ошибки.Это специфично для Chrome (возможно, WebKit). Что странно, у меня есть вторая страница в приложении, которая использует FB.Login, и она работает в Chrome в дополнение к другим браузерам.Я где-то читал, что Safari предъявляет более строгие требования к междоменным сценариям - он и Chrome используют одну и ту же базу кода.

Domains, protocols and ports must match (сообщение об ошибке) Я считаю, что на самом деле удовлетворен, потому что у меня есть другая страница, которая работает с FB.Login вызовом Единственное другое отличие, которое я вижу между этими двумя сообщениями, - это запрос postmessageАргумент имеет различное значение для каждого (выделено жирным шрифтом в сообщениях). Однако существует только один iFrame, который составляет приложение Facebook, поэтому мне интересно, почему два разных значения могут использоваться одно за другим.Я не хочу приводить ответы, чтобы сосредоточиться на этом вопросе, но я действительно хотел указать на это.

Приветствуются предложения по устранению этой ошибки.

Сообщения консоли Chrome JavaScript:

Сообщение1 : небезопасная попытка JavaScript для доступа к фрейму с URL

https://www.facebook.com/dialog/permissions.request?api_key=168297653202478&app_id=168297653202478&display=popup&fbconnect=0&locale=en_US&method=permissions.request&next=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%23cb%3Df3d15633dc%26origin%3Dhttp%253A%252F%252Fsubdomain.example.com%252Ff22a8befa%26relation%3Dopener%26transport%3D postmessage % 26frame% 3D f111baf6f4 % 26result% 3D% 2522xxRESULTTOKENxx% 2522 & perms = publish_stream% 2Coffline_access & return_session = 1 & sdk = joey & session_version = 3 из фрейма с URL http://subdomain.example.com/colonversationmap/Admin.TestPage.aspx?signed_request=871miFgH_-o05POnx20387XHd2YlArKLU6qUv8VkxY4.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTI5ODQyMDEwMSwidXNlciI6eyJjb3VudHJ5IjoiY2EiLCJsb2NhbGUiOiJlbl9VUyIsImFnZSI6eyJtaW4iOjIxfX19. Домены, протоколы и порты должны совпадать.

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

https://www.facebook.com/dialog/permissions.request?api_key=168297653202478&app_id=168297653202478&display=popup&fbconnect=0&locale=en_US&method=permissions.request&next=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%23cb%3Df304d46e08%26origin%3Dhttp%253A%252F%252Fsubdomain.example.com%252Ff23ce8203%26relation%3Dopener%26transport%3D postmessage % 26f%% 3D fcd3637bc % 26result% 3D% 2522xxRESULTTOKENxx% 2522 & perms =publish_stream% 2Coffline_access & return_session = 1 & sdk = joey & session_version = 3 из фрейма с URL http://subdomain.example.com/colonversationmap/Admin.TestPage.aspx?signed_request=871miFgH_-o05POnx20387XHd2YlArKLU6qUv8VkxY4.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTI5ODQyMDEwMSwidXNlciI6eyJjb3VudHJ5IjoiY2EiLCJsb2NhbGUiOiJlbl9VUyIsImFnZSI6eyJtaW4iOjIxfX19. Домены, протоколы и порты должны совпадать.

Ответы [ 4 ]

3 голосов
/ 23 января 2012

Я также столкнулся с проблемой, когда getLoginStatus () не вызывался в Chrome. Я попытался вызвать его при загрузке страницы и после инициированного пользователем действия, но безуспешно.

Оказалось, что это не междоменная проблема. Вызов был заблокирован расширением Un-Passwordise в Chrome. Как только я отключил расширение, оно работало отлично, даже при загрузке страницы.

Подробнее об этой проблеме здесь: FB.getLoginStatus никогда не запускает функцию обратного вызова в JavaScript SDK Facebook

2 голосов
/ 24 января 2012

У меня была эта проблема на моем сайте, но оказалось, что я использовал старую версию FB.login.

со страницы Facebook FB.login :

По состоянию на 13 декабря 2011 г. SDK JavaScript теперь поддерживает только OAuth 2.0 для аутентификации.Возможность включения OAuth 2.0 в JS SDK была впервые представлена ​​в июле.Все приложения были предоставлены для тестирования и миграции до 1 октября 2011 года.С этим изменением убедитесь, что вы заменили response.session на response.authResponse.Чтобы запросить разрешения, вы должны использовать scope вместо perms.Подробнее о конкретных изменениях читайте здесь.

2 голосов
/ 25 декабря 2011

Добавление файла канала может помочь в решении этой проблемы. Смотрите документацию по API JavaScript Javascript: https://developers.facebook.com/docs/reference/javascript/

2 голосов
/ 24 февраля 2011

В моем случае оказалось, что Chrome жаловался всякий раз, когда я вызывал метод FB.login(..) API JavaScript Facebook сразу после загрузки страницы или DOM.

Чтобы обойти эту проблему в Chrome, я поместил на страницу кнопку, которую пользователь должен нажать, чтобы запустить сценарий входа. Это работает в Chrome. Это обходной путь, но пока достаточно для меня.

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

...