9

我希望我的 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 - 总而言之,对于用户来说,这是一个非常漫长且令人沮丧的体验。

有没有一种我没有想到的方法?

4

1 回答 1

3

我几乎可以肯定,如果没有 Facebook 的特别帮助,就没有办法做到这一点。例如,Facebook 可以在画布页面上实现一个脚本,该脚本利用postMessage( https://developer.mozilla.org/en-US/docs/DOM/window.postMessage ) 来侦听来自 iframe 的跨域消息。

但如果没有 Facebook 的合作,我认为任何现代的标准浏览器都不会允许您这样做。

于 2013-05-15T17:47:28.500 回答