Hinzufügen von Verlaufsstatus in einer backbone.js Facebook-App (im iframe)

9

Ich entwickle eine Facebook-App, die backbone.js 0.3.3 verwendet und versuche, den Zurück-Button zum Laufen zu bringen richtig für Benutzer.

Backbone speichert den Status über den URL-Hash, der für das interne Routing verwendet wird. Zum Beispiel lädt #home die Homepage und #session ist eine andere Seite. Der Verlauf wird gespeichert, wenn dies außerhalb eines Iframes geschieht. Sie können also mit der Zurück-Schaltfläche korrekt navigieren.

Navigation innerhalb des iframe ist nicht das Problem, und alle Verbindungen funktionieren, aber keine Geschichte wird vom Browser gespeichert.

Die Frage:

Der Facebook iframe zeigt auf http://app.example.com , was die Backbone-Anwendung ist. Wie kann ich den Zurück-Button für den Nutzer in der Facebook App verwenden? Bonuspunkte für eine bestehende Lösung mit Backbone.

Ich habe diese Frage aus verschiedenen Blickwinkeln betrachtet und finde nirgendwo eine befriedigende Lösung. Es scheint, als ob nur sehr wenige Facebook-Apps Backbone verwenden / sich so sehr auf Javascript verlassen.

Ich denke, dass die Lösung darin besteht, dem übergeordneten Fenster des Iframes Verlaufsstatus hinzuzufügen, aber ich weiß nicht, wie ich das machen soll. HTML5 Geschichte? Eine Art von Facebook API? Selbst eine Teillösung (für moderne Browser) ist der aktuellen Situation vorzuziehen.

    
Wylie 26.07.2011, 20:31
quelle

1 Antwort

3

Ich glaube, Ihre Facebook-Anwendung befindet sich in einer Sandbox, die sie Canvas nennen. Da es sich um eine Sandbox handelt, handelt es sich nicht um einen direkten Iframe mit dem Quellcode Ihrer Website. Tatsache ist, dass Facebook den Quellcode von Ihrer Website liest, in seine Sandbox legt und die Sandbox im iframe rendert.

Ich bin mir nicht sicher, ob das immer noch stimmt. In alten Facebook-Anwendungen werden in dieser Sandbox viele JavaScript-APIs entführt. Zum Beispiel ist document.getElementById nicht das ursprüngliche document.getElementById . Es ist etwas anderes, das nur Elemente innerhalb der Sandbox abrufen kann. Sie stellen sicher, dass fast alle JavaScript-APIs, die Sie verwenden, wie erwartet funktionieren, jedoch ohne die Möglichkeit, außerhalb der Sandbox zu erreichen.

Ein Problem ist, dass sie das ursprüngliche window.location-Verhalten nicht verspotten. Ich denke, das liegt daran, dass sie erwarten, dass es außerhalb Ihres Geltungsbereiches liegen sollte. Ihre Anwendung befindet sich in der Arbeitsfläche (Sandbox) und die Sandbox befindet sich im Iframe. Also sollte der Iframe etwas außerhalb Ihrer Reichweite sein.

Ich habe noch keine Idee, eine bisherige API-Unterstützung in Facebook Canvas zu implementieren. Da die gesamte Seite von Facebook entführt wird und Sie nichts in die Facebook-Domain einfügen können, befindet sich Ihre Seite tatsächlich in einer Domain, die Sie nicht kontrollieren können. In einer Situation wie dieser kann ich mir bisher keine mögliche Lösung vorstellen.

    
Cat Chen 27.07.2011 03:45
quelle