9

Ich möchte, dass meine Facebook-Canvas-App die URL der Adressleiste beim Ändern des Kontexts aktualisieren kann. Wenn beispielsweise die Home-URL meiner App https://apps.facebook.com/myapp/ lautet und der Benutzer auf dem Startbildschirm auf ein Element klickt, möchte ich, dass die in der Adressleiste angezeigte URL in https://apps.facebook.com/myapp/1/ oder https://apps.facebook.com/myapp/#1 geändert wird.Gibt es eine Möglichkeit, Pushstate() das übergeordnete Fenster in Facebook Canvas?

Normalerweise könnte meine App das mit HTML5 history.pushState() tun. Das Problem besteht darin, dass die Zeichenbereichsanwendung innerhalb eines Iframes ausgeführt wird und nicht auf das des übergeordneten Fensters zugreifen kann (weil der Iframe nicht dieselbe Domäne wie apps.facebook.com ist). Eine andere Technik sollte nur den Hash-Teil der Adresse ändern, d. H. window.location.hash = "1", aber das ist aus demselben Grund auch nicht innerhalb des Iframes möglich.

Es ist möglich, die übergeordnete Seite URL zu ändern, mit der gesamten Seite neu zu laden, von

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

Dies würde jedoch dazu führen, die übergeordnete Seite neu zu laden, eine gute Anzahl von Sekunden dauern, und dann neu zu laden Der Iframe - alles in allem eine sehr lange und frustrierende Erfahrung für den Benutzer.

Könnte es einen Weg geben, an dem ich nicht gedacht habe?

Antwort

3

Ich bin mir fast sicher, dass es keine Möglichkeit gibt, dies ohne besondere Hilfe von Facebook zu tun. Zum Beispiel könnte Facebook ein Skript auf der Canvas-Seite implementieren, das postMessage (https://developer.mozilla.org/en-US/docs/DOM/window.postMessage) verwendet, um domänenübergreifende Nachrichten von Ihrem iframe abzuhören.

Aber ohne die Mitarbeit von Facebook glaube ich nicht, dass Ihnen ein moderner Standard-Browser dies ermöglicht.

+0

Sie haben Recht. Leider hat Facebook API keine solche Methode, obwohl IMHO ist es eine ziemlich einfache Methode hinzuzufügen, vorausgesetzt, dass die Überprüfung der Domänenpräfix Übereinstimmungen ist gut genug Schutz gegen XSS. Wenn Sie glauben, dass Sie eine solche API für Ihre Zwecke nützlich finden können, stimmen Sie bitte mit dem FB ab: https://developers.facebook.com/bugs/133461353503702 – onon15

+1

+ 1ed it. Scheint so, als ob sie es jetzt auf der "Wunschliste" lassen. –