2012-05-22 1 views
2

Я прочитал ряд вопросов и ответов, в том числе this one на StackOverflow и ничего не работает. Мой вопрос ко всем ответам, которые я видел, «работает ли он в Safari?».Facebook redirect после входа в систему

Я пытаюсь заставить это работать с Safari. Он отлично работает с Chrome и Firefox. Но в Safari экран входа в систему просто зависает, и я получаю сообщение журнала «Небезопасный JavaScript для доступа к фрейму с URL».

У меня есть приложение для холста. Я хочу зарегистрировать пользователя и перенаправить его на страницу после входа в систему. Я пытаюсь перенаправить непосредственно после входа в систему. Я попытался

  1. установка window.top.location на facebook URL (с некоторыми данными, передаваемых в подписанном запросе в качестве аргумента all_data)

  2. устанавливающих window.location к URL с той же области, как мое приложение.

  3. подписавшись на auth.login событие и поставить редирект там

  4. положить перенаправлять в обратный вызов, чтобы войти в

Ни одна из этих работ для Safari. Я начинаю думать, что нет никакого способа сделать это.

function doSomething() 
{ 
    FB.login(
    function(loginResponse) 
    { 
     if (loginResponse.authResponse) 
     { 
     window.top.location = "my url" 
     } 
    }, 
    { 
     scope:"some,scope" 
    } 
); 
} 
} 

В ответ на Nitzan Томер, вот эквивалентный код, который не работает с Safari, но делает работу с другими:

function myThing() 
{ 
    FB.login(function(loginResponse) 
    { 
     if (loginResponse.authResponse) 
     { 
     FB.api('/me', function(response) 
     { 
      window.location = "http://my_app.com?x=" + response.xyz; 
     }); 
     } 
    }, 
    { 
     scope:"scopes" 
    } 
); 
} 

ответ

0

Оказалось, что проблема возникла несколько ранее в процессе входа в систему, и callback никогда не вызывался. Я установил точку останова в обратном вызове (который не был вызван), но я думал, что точка останова может не работать по какой-либо причине (возможно, потому, что она выполнялась в контексте другого окна).

В любом случае проблема заключалась в том, что файл канала (который, как представляется, рекомендуется для документов, является необязательным) работал неправильно, и это вызвало проблему с Safari, но не с другими браузерами.

0

Это не так много решение вашей проблемы, но более «обходной путь», хотя он все еще использует window.top.location, но не от обратного вызова, поэтому, возможно, он будет работать (я просто не уверен, где выполняется обратный вызов, так как это fb sdk, который его выполняет, возможно, они называют это из fb iframe внутри вашего iframe).

Вместо использования аутентификации на стороне клиента вы можете использовать server side flow. Весь процесс происходит в верхнем окне, так как он начинается с того, что вы перенаправляете пользователя в диалог oauth с помощью window.top.location.

Когда процесс заканчивается, facebook перенаправляет пользователя на ваш redirect_uri, и там вы можете просто перенаправить пользователя, когда захотите.

Надеюсь, это поможет. Кроме того, вы должны знать, что в Facebook Platform Policies говорится:

13. Основная цель вашего приложения Canvas или страницы Tab на Facebook не должна состоять в том, чтобы просто перенаправить пользователей из опыта Facebook и на внешний сайт.

+0

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

+0

Итак, почему вы хотите использовать 'window.top.location'? Просто используйте 'window.location', чтобы изменить URL-адрес вашего iframe, а не главного окна. –

+0

В этом весь смысл. Этот метод работает для Chrome и FF, но он просто не работает для Safari. – Joe