Chcę, aby moja aplikacja do wyświetlania na Facebooku mogła aktualizować adres URL paska adresu podczas zmiany kontekstu. Jeśli na przykład adres URL mojej aplikacji to https://apps.facebook.com/myapp/
, a użytkownik klika jakiś element na ekranie głównym, chciałbym, aby adres URL wyświetlany na pasku adresu zmienił się na https://apps.facebook.com/myapp/1/
lub https://apps.facebook.com/myapp/#1
.Czy istnieje sposób pushState() okna nadrzędnego na płótnie na Facebooku?
Zwykle moja aplikacja może to zrobić z kodem HTML5 history.pushState()
. Problem polega na tym, że aplikacja canvas działa wewnątrz elementu iframe i nie może uzyskać dostępu do okna nadrzędnego pushState
(ponieważ element iframe nie jest tą samą domeną co apps.facebook.com). Inną techniką powinna być zmiana tylko części hash adresu, to jest window.location.hash = "1"
, ale to też nie jest możliwe z wewnątrz elementu iframe, z tego samego powodu.
Jest możliwe, aby zmienić stronę rodzic URL z przeładowywania całej strony, za pomocą
window.parent.location = "https://apps.facebook.com/myapp/1/"
jednak spowodowałoby to strona dominująca przeładować, zajmując dużą liczbę sekund, a następnie załaduj iframe - w sumie bardzo długie i frustrujące doświadczenie dla użytkownika.
Czy jest jakiś sposób na zrobienie tego, o czym nie pomyślałem?
Masz rację. Niestety Facebook API nie ma takiej metody, mimo że IMHO jest dość prostą metodą dodawania, zakładając, że weryfikacja dopasowań prefiksu domeny jest wystarczająco dobra dla ochrony przed XSS. Jeśli uważasz, że możesz znaleźć takie API przydatne dla twoich zastosowań, zagłosuj na to za pomocą FB: https://developers.facebook.com/bugs/133461353503702 – onon15
+ 1ed to. Wygląda na to, że na razie pozostawiają go na "liście życzeń". –