Можно ли получить доступ к текущему URL браузера из вкладки «Страница Facebook» iframe? - PullRequest
0 голосов
/ 20 марта 2012

У меня есть вкладка iframe на странице facebook, и я хочу получить доступ к URL браузера, чтобы получить текущий URL страницы Facebook.

Я знаю, что невозможно использовать JavaScript, который взаимодействует с родительским фреймом из-за проблем безопасности браузера.

Подход, который не работал для всех браузеров, заключался в чтении заголовка HTTP_REFERER из запроса.

Есть ли лучший способ?

Ответы [ 3 ]

2 голосов
/ 20 марта 2012

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

Вы не должны писать код в зависимости от компрометации других пользователей.

1 голос
/ 20 марта 2012

Невозможно получить URL родительского фрейма из-за междоменной политики. И нет никакой возможности получить информацию о странице, на которой работает ваше приложение, на стороне клиента.

Но на стороне сервера вы можете восстановить URL страницы, используя данные, переданные в signed_request. Для приложений на вкладках страниц он содержит page:

Объект JSON, содержащий страницу id string, liked boolean (установите значение true, если пользователю понравилась страница, false, если нет) и admin boolean (установите на true, если пользователь является администратором страницы, false, если это не так).

Используя этот идентификатор страницы, вы можете создать URL страницы:

http://www.facebook.com/pages/-/PAGE_ID

Если вы хотите, чтобы ссылка на вкладку страницы в вашем приложении использовалась:

http://www.facebook.com/pages/-/PAGE_ID?v=app_APPLICATION_ID

Осторожно, HTTP_REFERRER предоставляется клиентом и ему нельзя доверять, и его можно отключить с помощью плагина / прокси / и т. Д. *

Примечания:
Страницы могут иметь разные URL в реальной жизни, но при использовании этого метода пользователь получит правильную страницу, так как Facebook будет перенаправлять на правильный URL страницы.
Примеры URL используют схему HTTP, не стесняйтесь использовать HTTPS, если вам это нужно.

Например, в PHP вы можете определить текущую схему следующим образом:

$scheme = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']!=="off") ||
           (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
            $_SERVER['HTTP_X_FORWARDED_PROTO']=="https")
          ) ? 'https' : 'http';
0 голосов
/ 20 марта 2012

HTTP_REFERRER может работать не так, как я ожидал. Если приложение с вкладками предназначено для конкретной страницы (что, я полагаю, должно), попытались ли вы воссоздать ее?

https://www.facebook.com/MYPAGENAME/app_MYAPPID

Где MYPAGENAME - это имя вашей страницы, а MYAPPID - это, конечно, идентификатор приложения.

Если эта вкладка применяется к нескольким страницам, я вполне уверен, что вы получите соответствующие данные для применения вышеуказанного с https://graph.facebook.com/PAGEID,, где PAGEID - это идентификатор страницы, которую вы получаете с подписанный запрос .

...