9

Я хочу, чтобы мое приложение facebook canvas могло обновлять URL адресной строки при изменении контекста. Например, если домашний URL моего приложения https://apps.facebook.com/myapp/, и пользователь нажимает на какой-либо элемент на главном экране, я бы хотел, чтобы URL-адрес, отображаемый в адресной строке, изменился на https://apps.facebook.com/myapp/1/ или https://apps.facebook.com/myapp/#1.Есть ли способ pushState() родительского окна в холсте facebook?

Обычно мое приложение может делать это с помощью HTML5 history.pushState(). Проблема заключается в том, что приложение canvas работает внутри iframe и не может получить доступ к родительскому окну pushState (поскольку iframe - это не тот же домен, что и apps.facebook.com). Другой метод должен менять только хэш-часть адреса, то есть window.location.hash = "1", но это тоже невозможно из-за iframe по той же причине.

Можно изменить родительский адрес страницы с перезагрузки всей страницы, с помощью

window.parent.location = "https://apps.facebook.com/myapp/1/" 

Однако, это вызывает бы родительской страницы для перезагрузки, занимая большое количество секунд, а затем снова iframe - в целом, очень длинный и неприятный опыт для пользователя.

Может ли быть способ сделать это, о котором я не думал?

ответ

3

Я почти уверен, что нет никакого способа сделать это без особой помощи от конца Facebook. Например, Facebook может реализовать скрипт на странице холста, который использует postMessage (https://developer.mozilla.org/en-US/docs/DOM/window.postMessage) для прослушивания междоменных сообщений из вашего iframe.

Но без сотрудничества с Facebook я не думаю, что любой современный, стандартный браузер позволит вам это сделать.

+0

Вы правы. К сожалению, API Facebook не имеет такого метода, хотя IMHO это довольно простой метод для добавления, предполагая, что проверка соответствия префикса домена является достаточно хорошей защитой от XSS. Если вы считаете, что такой API полезен для ваших целей, проголосуйте за него с помощью FB: https://developers.facebook.com/bugs/133461353503702 – onon15

+1

+ 1ed. Похоже, что они оставляют его в «списке желаний». –