Как получить фрагмент URL-адреса (хэш) из URL-адреса приложения Facebook, переданного на холст приложения? - PullRequest
1 голос
/ 19 января 2012

Я кодирую приложение на одной странице внутри Facebook (используя подход холста).Пока пользователь перемещается внутри приложения, я меняю местоположение, например: apps.facebook.com/my-app#current_location и загружаю вещи через AJAX.

К сожалению, когда кто-то загружает http://apps.facebook.com/my-app#current_locationих браузер, приложение Canvas не видит фрагмент URL # currrent_page.

Как мне обойти это ограничение?

Ответы [ 3 ]

1 голос
/ 05 марта 2015

Хотя я не могу правильно ответить на ваш вопрос (и, как мне кажется, он уже довольно старый), приведенная ниже информация должна помочь другим людям лучше понять эти # (хэш) вещи. Они называются Фрагменты URL .

http://blog.httpwatch.com/2011/03/01/6-things-you-should-know-about-fragment-urls/

Любой URL, содержащий символ #, является фрагментом URL. Часть URL слева от # идентифицирует ресурс, который может быть загруженный браузером и часть справа, известная как идентификатор фрагмента, указывает местоположение в ресурсе:

layout of a url fragment

Фрагменты не отправляются в сообщениях HTTP-запроса

Если вы попытаетесь использовать URL фрагментов в HTTP-сниффере, таком как HttpWatch, вы никогда не увидите идентификаторы фрагментов в запрошенном URL или реферере заголовок. Причина в том, что идентификатор фрагмента используется только браузер - это не влияет на то, какой ресурс возвращается из сервер. Вот снимок экрана HttpWatch, показывающий генерируемый трафик обновив фрагмент URL:

HttpWatch Screenshot

0 голосов
/ 19 января 2012

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

Таким образом, когда кто-то может получить доступ к определенной информации, такой как http://yoursite.com/#artists/styx,, у вашего сервера также есть возможность предоставлять контент с http://yoursite.com/artists/styx. Таким образом, кто-то может поделиться http://apps.facebook.com/yoursiteapp/artists/styxа затем получить правильный контент на вашем сайте.

0 голосов
/ 19 января 2012

Фрагмент URL читается только на стороне клиента (в браузерах пользователей), поэтому Facebook не отправляет и не может отправить его по запросу POST, который он отправляет на ваш сервер.

Что вы можетеdo перехватывает все URL-адреса с одинаковым маршрутом, независимо от того, на каком языке сервер вы выбрали, каким-то образом их кодируйте и отправляйте клиенту для чтения клиентским Javascript, который затем будет отвечать за навигацию.

Пример: пользователь загружает http://apps.facebook.com/my-app/current_location (обратите внимание на / вместо # ).Вы обслуживаете свою единственную страницу, где у вас будет что-то вроде (ERB):

<script>MyApp.navigate("<%= request.path %>");</script>

Ваша функция навигации может выполнять следующие действия:

function navigate(path) {
    window.location.href = "#" + path;
}
...