Wyl*_*lie 9 javascript iframe html5 facebook backbone.js
我正在开发一个使用backbone.js 0.3.3 的Facebook应用程序,我正在尝试让后退按钮为用户正常工作.
Backbone通过URL哈希保存状态,URL哈希用于执行内部路由.例如,#home将加载主页,#session是另一个页面.当这种情况发生在iframe之外时,会保存历史记录,因此您可以使用后退按钮正确导航.
在iframe中导航不是问题,并且所有链接都有效,但浏览器不会保存历史记录.
问题:
Facebook iframe指向http://app.example.com,这是Backbone应用程序.如何让后退按钮在Facebook应用程序上为用户工作?使用Backbone的现有解决方案的奖励积分.
我从几个角度研究了这个问题,无法在任何地方找到满意的解决方案.似乎很少有Facebook应用程序使用骨干/非常依赖Javascript.
我认为解决方案是将历史状态添加到iframe的父窗口,但我不知道如何做到这一点.HTML5历史?某种Facebook API?即使是部分解决方案(对于现代浏览器)也比当前情况更好.
我认为您的 Facebook 应用程序位于沙盒中,他们称之为Canvas。因为它是一个沙箱,所以它不是带有您网站源代码的直接 iframe。事实是,Facebook 从您的网站读取源代码,将其放入他们的沙箱中,并在 iframe 中渲染沙箱。
我不确定这是否仍然正确。在旧的 Facebook 应用程序中,在这个沙箱中,许多 JavaScript API 被劫持。例如document.getElementById不是原来的document.getElementById。这是别的东西,它只能检索沙箱内的元素。他们确保您将使用的几乎所有 JavaScript API 都会按照您的预期运行,但无法到达沙箱之外的任何地方。
一个问题是他们没有模拟原始的 window.location 行为。我认为那是因为他们认为这应该超出你的范围。您的应用程序位于画布(沙箱)中,沙箱位于 iframe 中。所以 iframe 应该是你无法触及的东西。
到目前为止,我还不知道在 Facebook Canvas 中实现历史 API 支持。因为整个页面都被 Facebook 劫持了,你无法在 Facebook 的域中放置任何内容,所以你的页面实际上位于你无法控制的域中。对于这样的情况,我目前还想不出可行的解决办法。