9

facebook canvas uygulamasının bağlam değiştirirken adres çubuğu URL'sini güncelleyebilmesini istiyorum. Örneğin, uygulamanızın ana URL'si https://apps.facebook.com/myapp/ ise ve kullanıcı ana ekrandaki bir öğeye tıklarsa, adres çubuğunda gösterilen URL'nin https://apps.facebook.com/myapp/1/ veya https://apps.facebook.com/myapp/#1 olarak değiştirilmesini isterim.facebook tuvalinde ana pencereyi itmek için bir yol var mı?

Normalde, uygulamam HTML5 history.pushState() ile bunu yapabilirdi. Sorun, tuval uygulamasının bir iframe içinde çalıştığı ve üst pencerenin pushState'a erişememesidir (iframe apps.facebook.com ile aynı etki alanı olmadığı için). Başka bir teknik, adresin sadece karma kısmını değiştiriyor olmalıdır, yani window.location.hash = "1", ama aynı sebepten dolayı iframe içinde de mümkün değildir.

O

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

Ancak kullanarak, tüm sayfayı yeniden ebeveyn sayfası URL'sini değiştirmek mümkündür, bu üst sayfa, yeniden saniye iyi bir sayı kaplıyor ve daha sonra yeniden neden olur iframe - hepsi, kullanıcı için çok uzun ve sinir bozucu bir deneyim.

Bunu yapmanın bir yolu düşünülmemiş olabilir mi?

cevap

3

Facebook'un sonundan özel bir yardım almadan bunu yapmanın bir yolu olmadığından neredeyse eminim. Örneğin Facebook, iframe'inizden etki alanları arası mesajları dinlemek için postMessage (https://developer.mozilla.org/en-US/docs/DOM/window.postMessage) kullanan tuval sayfasında bir komut dosyası uygulayabilir.

Ancak Facebook'tan hiçbir işbirliği olmadan, herhangi bir modern, standart tarayıcının bunu yapmanıza izin vereceğini sanmıyorum.

+0

Haklısınız. Ne yazık ki, Facebook API'sı böyle bir yönteme sahip değildir, ancak IMHO, etki alanı önek eşleşmelerinin doğrulanmasının XSS'e karşı yeterince iyi bir koruma olduğunu varsayarak eklemek için oldukça basit bir yöntemdir. Böyle bir API'yi kullanımlarınız için yararlı bulabileceğinizi düşünüyorsanız, lütfen bunun için FB ile oy verin: https://developers.facebook.com/bugs/133461353503702 – onon15

+1

+ 1ed. Şimdilik bunun için "dilek listesi" üzerinde bırakıyor gibi görünüyor. –