从弹出窗口重新加载特定帧

时间:2013-01-04 22:00:40

标签: javascript jquery internet-explorer popup window

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

因此,用户点击框架内的按钮,即可打开弹出窗口。现在从弹出窗口,基于特定事件,我想从父窗口重新加载一个帧。

这在IE中是否可行?

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

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

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

我该怎么做?

我试过了:

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

似乎没什么用。

5 个答案:

答案 0 :(得分:2)

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

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

这些数据消息反过来可以在分析传入的jQuery数据后将新内容或备用网页加载到父页面上的原始iframe2中。

文章: jQuery plugin for communication between browser windows

在线演示: Parent Page

下载项目 windowmsg.zip

下载的文件可以直接在您的桌面上使用,与jsFiddle不同,因为它不允许在那里。


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

此方法的好处在于您可以完全控制iframe的关闭方式,与上述具有自己的浏览器关闭按钮的辅助浏览器窗口不同,后者可能无法触发您想要的事件。

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

答案 1 :(得分:2)

在您的情况下,window.opener是打开弹出窗口的iframe的窗口对象,因此opener.location.reload()应该有效:Demo

演示来源:

答案 2 :(得分: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查询并在主窗口中显示结果),所以我快速浏览了一下;)

答案 3 :(得分:0)

你试过了吗?

opener.frames["myIFrameId"].location.reload();

答案 4 :(得分:0)

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

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

或者在iframe上创建div包装器并重新生成iframe