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

相關問題