我有一个弹出窗口,从那里,我希望父窗口重新加载,但是特定的框架不是整个页面。
因此,用户点击框架内的按钮,即可打开弹出窗口。现在从弹出窗口,基于特定事件,我想从父窗口重新加载一个帧。
这在IE中是否可行?
我有一个页面index.php,里面有2个iframe。
从第二个iframe打开一个新的弹出窗口。
当用户点击按钮或关闭弹出窗口时,我想重新加载iframe#2(打开窗口的那个)。
我该怎么做?
我试过了:
opener.location.reload();
opener.top.document.getElementById('myIFrameId').location.reload()
opener.myIFrameId.location.reload();
似乎没什么用。
答案 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