【发布时间】:2013-02-13 01:52:44
【问题描述】:
我希望我的 facebook 画布应用能够在更改上下文时更新地址栏 URL。因此,例如,如果我的应用的主页 URL 是 https://apps.facebook.com/myapp/,并且用户单击主屏幕上的某个项目,我希望地址栏中显示的 URL 更改为 https://apps.facebook.com/myapp/1/ 或 https://apps.facebook.com/myapp/#1。
通常情况下,我的应用可以使用 HTML5 的 history.pushState() 做到这一点。问题是,画布应用程序在 iframe 中运行,并且无法访问父窗口的 pushState(因为 iframe 与 apps.facebook.com 的域不同)。另一种技术应该只更改地址的哈希部分,即window.location.hash = "1",但出于同样的原因,这在 iframe 中也是不可能的。
可以通过重新加载整个页面来更改父页面 URL,通过使用
window.parent.location = "https://apps.facebook.com/myapp/1/"
但是,这会导致父页面重新加载,占用大量秒数,然后重新加载 iframe - 总而言之,对于用户来说,这是一个非常漫长且令人沮丧的体验。
有没有我没想到的方法?
【问题讨论】:
标签: facebook iframe same-origin-policy facebook-canvas pushstate