Добавление состояний истории в приложение Facebook backbone.js (в iframe) - PullRequest
9 голосов
/ 27 июля 2011

Я занимаюсь разработкой приложения для Facebook, которое использует backbone.js 0.3.3 и пытаюсь заставить кнопку «Назад» работать должным образом для пользователей.

Backbone сохраняет состояние через URLхеш, который используется для внутренней маршрутизации.Например, #home загрузит домашнюю страницу, а #session - другую страницу.История сохраняется, когда это происходит вне iframe, поэтому вы можете правильно перемещаться с помощью кнопки назад.

Навигация внутри iframe не является проблемой, и все ссылки работают, но браузер не сохраняет историю.

Вопрос:

iframe Facebook указывает на http://app.example.com, которое является приложением Backbone. Как заставить кнопку «Назад» работать для пользователя в приложении Facebook? Бонусные баллы за существующее решение, использующее Backbone.


Я рассматривал этот вопрос с нескольких точек зрения.и не может найти удовлетворительное решение, доступное где-либо.Кажется, что очень немногие приложения Facebook используют магистраль / так полагаются на Javascript.

Я думаю, что решение состоит в том, чтобы добавить исторические состояния в родительское окно iframe, но я не знаю, как это сделать,HTML5 история?Какой-то API Facebook?Даже частичное решение (для современных браузеров) предпочтительнее текущей ситуации.

1 Ответ

3 голосов
/ 27 июля 2011

Я думаю, что ваше приложение Facebook находится в песочнице, которую они называют Canvas . Поскольку это песочница, это не прямой фрейм с исходным кодом вашего сайта. Дело в том, что Facebook читает исходный код с вашего сайта, помещает его в свою песочницу и отображает песочницу в iframe.

Я не уверен, правда ли это. В старых приложениях Facebook в этой изолированной программной среде многие API JavaScript были взломаны. Например, document.getElementById не является оригиналом document.getElementById. Это что-то еще, что может извлечь только элементы из песочницы. Они гарантируют, что почти все API-интерфейсы JavaScript, которые вы будете использовать, будут работать так, как вы ожидаете, но без возможности доступа за пределы песочницы.

Одна проблема заключается в том, что они не высмеивают исходное поведение window.location. Я думаю, это потому, что они ожидают, что это должно быть за пределами вашей компетенции. Ваше приложение находится в холсте (песочнице), а песочница - в фрейме. Таким образом, iframe должен быть чем-то вне вашей досягаемости.

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

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