Проверить, есть ли мой iframe в документе Facebook? - PullRequest
2 голосов
/ 04 октября 2011

Я создал приложение Facebook для размещения своего сайта в iframe.

При каждом запросе я хочу убедиться, что сайт находится внутри приложения Facebook, в противном случае я хочу перенаправить пользователя в приложение Facebook.

Я могу проверить, что я в пределах iframe с помощью javascript:

if (top! = Self)

Но я не знаю, действительно ли я нахожусь в приложении Facebook. Междоменная безопасность мешает мне получить доступ к информации родительского документа. Например, «top.location.href» недоступен.

Может кто-нибудь мне помочь? : -)

Ответы [ 3 ]

3 голосов
/ 27 июня 2012

Facebook прикрепляет значение к window.name, чтобы вы могли использовать JavaScript для проверки.

if(window.name.indexOf('iframe_canvas_fb') != -1){
  // in Facebook
} else {
  // not in Facebook
}
0 голосов
/ 28 октября 2013

Хорошо, если пользователь находится за пределами Facebook, этот фрагмент сценария перед тем, как тег HTML body должен перенаправить его обратно на вашу страницу в Facebook:

<script language="JavaScript" type="text/javascript">
<!--
if (self == top) {
    window.location = "http://apps.facebook.com/YOUR_APP_PAGE";
}
-->
</script>

не забудьте изменить бит YOUR_APP_PAGE на что-то вроде: 'Мое-приложение? App_Data = страница-местоположение'

Вы можете отправить запрос? App_data на свою страницу Facebook с помощью php и добавить страницу, с которой был перенаправлен ваш веб-сайт, чтобы app_data могла сообщить вашему приложению о загрузке этой страницы, но в Facebook.

Так что стоит поискать в Facebook app_data

Если вы хотите изменить стиль вашей страницы в зависимости от того, отображается она на Facebook или нет, используйте это:

<script language="JavaScript" type="text/javascript">
<!--
if (window.self = "http://apps.facebook.com/") {
    var element = document.getElementById('html');
    element.className = "facebook"; 
}
-->
</script>

и измените свой HTML-тег с id = html следующим образом:

<html id="html" xmlns:fb="http://www.facebook.com/2008/fbml">

это позволит вам использовать имя класса .facebook переназначить любой стиль для вашей страницы, который вам нравится.

Если вам нужно установить некоторые начальные настройки php, например страницу перенаправления, то вы можете использовать этот код в php для определения, находитесь ли вы в Facebook, однако этот код не может определить, находится ли пользователь в Facebook или нет после того, как он авторизовался:

if(!empty($_POST['signed_request'])){
//do something with php here...
}

Примечание:

Маловероятно, что у пользователя Facebook на странице вашего приложения отключен JavaScript, поэтому мы можем использовать приведенный выше код php для установки перенаправлений и т. Д. *

php на самом деле не должен полагаться на $ _SESSION или куки для этого, если пользователь решит посетить вашу страницу, выполнив вход в приложение Facebook, потребуется php для обновления страницы, чтобы определить, что они больше не находятся в Facebook с сеанс или файл cookie.

После мысли:

Вся эта информация должна быть в SDK Facebook, поскольку управление перенаправлениями и обнаружение приложений - это кошмар с ужасной документацией Facebook.

Надеюсь, это поможет вам:)

0 голосов
/ 04 октября 2011

Вы можете проверить методы пространства имен FB.Canvas из библиотеки javascript в Facebook. Это будет работать на холсте Facebook.

https://developers.facebook.com/docs/reference/javascript/FB.Canvas.getPageInfo/  

проверьте, какую информацию вы получаете, находясь в фрейме Facebook, вне фрейма или в другом фрейме.

надеюсь, это поможет

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