我希望我的facebook canvas应用程序能够在更改上下文时更新地址栏URL。因此,例如,如果我的应用的主页网址为https://apps.facebook.com/myapp/
,并且用户点击主屏幕上的某个项目,我希望地址栏中显示的网址更改为https://apps.facebook.com/myapp/1/
或{ {1}}。
通常情况下,我的应用可以使用HTML5 https://apps.facebook.com/myapp/#1
来实现。问题是,canvas应用程序在iframe中运行,并且无法访问父窗口的history.pushState()
(因为iframe与apps.facebook.com不是同一个域)。另一种技术应该只改变地址的哈希部分,即pushState
,但出于同样的原因,也不能在iframe中进行。
可以通过使用
重新加载整个页面来更改父页面URLwindow.location.hash = "1"
但是,这会导致父页面重新加载,占用大量秒数,然后重新加载iframe - 总而言之,这对用户来说是一个非常漫长而令人沮丧的体验。
有没有办法做到这一点我还没有想过?
答案 0 :(得分:3)
我几乎可以肯定,如果没有Facebook的特殊帮助,就没有办法做到这一点。例如,Facebook可以在画布页面上实现一个脚本,该脚本利用postMessage
(https://developer.mozilla.org/en-US/docs/DOM/window.postMessage)来监听来自iframe的跨域消息。
但如果没有Facebook的合作,我认为任何现代的标准浏览器都不允许你这样做。