3

我有一个弹出窗口,从那里,我希望父窗口重新加载,但一个特定的框架不是整个页面。

因此,用户从框架中单击一个按钮,它会打开弹出窗口。现在从弹出窗口中,基于特定事件,我想从父窗口重新加载框架。

这在IE中可能吗?

我有一个页面 index.php,其中有 2 个 iframe。

从第二个 iframe 打开一个新的弹出窗口。

当用户单击按钮或关闭弹出窗口时,我想重新加载 iframe#2(打开窗口的那个)。

我怎样才能做到这一点?

我努力了:

 opener.location.reload();
 opener.top.document.getElementById('myIFrameId').location.reload()
 opener.myIFrameId.location.reload();

似乎没有任何效果。

4

5 回答 5

2

我发现了一个很棒的jQuery 插件,它适用于所有现代浏览器,包括 IE8

它允许您轻松调用带有参数的辅助浏览器窗口,然后允许您在两者之间传递数据,类似于postMessage API工作原理。

一旦您分析了传入的 jQuery 数据,这些数据消息又可以将新内容或备用网页加载到您父页面上的原始 iframe2 中。

文章: 浏览器窗口间通信的jQuery插件

在线演示: 父页面

下载项目: windowmsg.zip

下载的文件将直接在您的桌面上运行,这与jsFiddle不同,因为它不允许在那里。


当您不需要辅助浏览器窗口并且可以使用浮动 iframe 时,另一种解决方案效果很好,只需使用支持 iframe 的灯箱克隆,例如Shadowbox-js

这种方法的好处是您可以完全控制 iframe 的关闭方式,这与上面的辅助浏览器窗口不同,它有自己的浏览器关闭按钮,可能不会触发您想要的事件。

灯箱克隆关闭事件期间的回调可以根据需要更改父页面 iframe 2 中的内容。此外,您可以选择将灯箱绑定在 iframe 2 中(灯箱克隆安装在 iframe 页面中),或者全屏(灯箱克隆安装在父页面中)。

于 2013-01-08T05:56:42.257 回答
2

在您的情况下,window.opener是打开弹出窗口的 iframe 的 window 对象,所以opener.location.reload()应该可以工作:Demo

演示来源:

于 2013-01-14T10:15:09.767 回答
0

你有没有尝试过:

opener.frames["myIFrameId"].location.reload();
于 2013-01-10T08:06:11.433 回答
0

它将显示错误“错误:访问属性'重新加载'的权限被拒绝”

这可能是“同源政策”的问题。

或者您在 iframe 上创建一个 div 包装器并再次重新生成 iframe

于 2013-01-10T08:40:56.187 回答
0

我在这里重建了这个功能:http: //jsfiddle.net/JBWTn/3/

单击弹出窗口中的按钮将更改原始窗口中框架的边框外观。这里的关键是使用原始窗口的框架导航

window.opener.document.getElementById('[ID_OF_YOUR_FRAME]')

(与 Frank van Puffelen 建议的非常相似)

要重新加载框架而不是仅仅更改其样式,请使用

window.opener.document.getElementById('[ID_OF_YOUR_FRAME]').location.reload()

...就像您已经尝试过的问题一样。

这个问题让我想起了 phpMyAdmin 中的功能(您可以在其中从弹出窗口运行 SQL 查询并将结果显示在主窗口中),所以我快速浏览了一下;)

于 2013-01-07T23:48:43.473 回答