9

我希望我的Facebook画布应用能够在更改上下文时更新地址栏URL。因此,例如,如果我的应用的主页URL是https://apps.facebook.com/myapp/,并且用户在主屏幕上点击某个项目,我希望地址栏中显示的URL更改为https://apps.facebook.com/myapp/1/https://apps.facebook.com/myapp/#1有没有办法pushState()在Facebook画布的父窗口?

通常,我的应用程序可以通过HTML5的history.pushState()来实现。问题是,canvas应用程序在iframe中运行,并且无法访问父窗口的pushState(因为iframe与apps.facebook.com不同)。另一种技术应该只是改变地址的散列部分,即window.location.hash = "1",但这也是不可能的,因为同样的原因。

它是可以改变父页面的URL与重新加载整个页面,通过使用

window.parent.location = "https://apps.facebook.com/myapp/1/" 

然而,这会导致父页面重新加载,占用了相当数量的秒,然后重新装入iframe - 总而言之,对用户来说是一个非常漫长而令人沮丧的体验。

难道没有办法做到这一点我没有想到?

回答

3

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

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

+0

你是对的。不幸的是,Facebook API没有这样的方法,即使恕我直言,这是一个相当简单的方法来添加,假设验证域前缀匹配是足够好的防范XSS。如果你认为你可以找到这样的API对你的用途有用,请与FB投票:https://developers.facebook.com/bugs/133461353503702 – onon15 2013-05-16 06:18:52

+1

+ 1ed它。似乎他们现在将它放在“愿望清单”上。 – 2013-05-16 13:24:18

相关问题