9

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?

Odpowiedz

3

Jestem prawie pewien, że nie da się tego zrobić bez specjalnej pomocy ze strony Facebooka. Na przykład Facebook może zaimplementować skrypt na stronie płótna, który wykorzystuje postMessage (https://developer.mozilla.org/en-US/docs/DOM/window.postMessage) do odsłuchiwania wiadomości międzydomenowych z Twojego elementu iframe.

Ale bez współpracy z Facebookiem, nie sądzę, żeby jakakolwiek nowoczesna, standardowa przeglądarka pozwoli ci to zrobić.

+0

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

+1

+ 1ed to. Wygląda na to, że na razie pozostawiają go na "liście życzeń". –

Powiązane problemy