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