如何从iframe中重新加载最顶层窗口?

4
我正在开发一个Facebook应用程序,它具有以下“结构”:
Browser window (facebook.com/page/xxxx)
  -- My app's iframe
    -- Like button's iframe

我在我的应用中使用了一个“喜欢”按钮,因此这是一个内嵌在内嵌框架中的内容。当用户点击“喜欢”按钮时,我希望显示内容,所以当前页面看起来像这样:

if ( is_fan() ) {
    //show content
} else {
    //show like button plus other text
}

实际检查用户是否已经是粉丝的逻辑已经按照预期工作,问题在于当我点击“喜欢”按钮时,需要整个页面重新加载才能显示“粉丝内容”。如果我这样做:
FB.Event.subscribe('edge.create', function(href, widget) {
    top.location.reload();
});

页面似乎重新加载了,但一切都没有改变,但如果我点击“赞”按钮,然后在我的浏览器中单击刷新按钮,一切都会显示出来。

有人能帮我解决这个问题吗?

先感谢你们!

4个回答

7
我们将Facebook的父页面称为top
使用top.location.href="";top.location.reload();

嗨,由于某些原因它不起作用了,我正在更新问题并提供详细信息。 - Javier Villanueva
这种方法的问题在于它会询问用户是否要重新提交表单。 - Gajus
1
如果您使用.reload(),Facebook会使用表单将signed_requests发送到iframe。因此,如果iframe重新加载,POST_DATA将再次发送并要求确认。如果您使用.href="YOUR_URL",则不会看到这个问题。 - dragonjet

2
尝试使用top.location.reload(true);代替top.location.reload();http://www.w3schools.com/jsref/met_loc_reload.asp提取:
默认情况下,location.reload()方法从缓存中重新加载,但是您可以通过将forceGet参数设置为true来强制重新加载页面以从服务器获取:location.reload(true)。

2

对我来说,无论是top.location.href="";还是top.location.reload();都没有起作用。

我不得不使用top.location.href="http://www.facebook.com/appurl";


0

如果需要重新加载,您可以使用 top.location.href = top.location.href;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接