如何从 iframe 重新加载最顶部的窗口?

Posted

技术标签:

【中文标题】如何从 iframe 重新加载最顶部的窗口?【英文标题】:how to reload top most window from iframe? 【发布时间】:2011-08-22 01:57:47 【问题描述】:

我正在开发一个具有以下“结构”的 facebook 应用程序:

Browser window (facebook.com/page/xxxx)
  -- My app's iframe
    -- Like button's iframe

我在我的应用程序中使用了一个喜欢按钮,所以这是 iframe 中的一个 iframe,当用户点击喜欢按钮时,我想显示内容,因此页面当前看起来像这样:

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

检查用户是否已经是粉丝的实际逻辑正在按预期工作,问题是当我点击赞按钮时,我需要重新加载整个页面以显示“粉丝内容”,如果我这样做了这个:

FB.Event.subscribe('edge.create', function(href, widget) 
    top.location.reload();
);

页面似乎重新加载,但一切都保持不变,但如果我点击“喜欢”并点击浏览器中的刷新按钮,一切都会正常显示。

谁能帮我解决这个问题?

提前致谢!

【问题讨论】:

【参考方案1】:

尝试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.href;

【讨论】:

【参考方案3】:

top.location.href="";top.location.reload(); 都不适合我。

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

【讨论】:

【参考方案4】:

我们将 facebook 父页面引用为 top

使用top.location.href="";top.location.reload();

【讨论】:

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

以上是关于如何从 iframe 重新加载最顶部的窗口?的主要内容,如果未能解决你的问题,请参考以下文章

从 iFrame 加载顶部框架中的页面

在 iframe 中提交后重新加载页面(javascript/jquery)

从单独的 iframe 重新加载 iframe

如何让按钮在发送时刷新页面,并且在重新加载时同时使用相同的按钮让 iframe 滚动到框架的底部

打开两个 iframe 而无需完全重新加载第二个 iframe

如何从父文档中捕获 iframe 内部的刷新?