【问题标题】:Reload a specific frame from a popup window从弹出窗口重新加载特定帧
【发布时间】:2012-12-19 09:29:21
【问题描述】:

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

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

这在 IE 中可行吗?

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

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

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

我该怎么做?

我试过了:

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

似乎没有任何效果。

【问题讨论】:

  • “弹出窗口”是 IE 的新实例还是网页上的模式?
  • 通过 javascript 创建,window.open(...)
  • 您可以通过opener 变量从弹出窗口访问父窗口。从那里您可以使用 getElementById 查找 iframe,使用 getElementsByTagName 查找所有 iframe 或使用 window.frames 属性。你在这条路上卡在哪里了?
  • @FrankvanPuffelen 我试过:window.opener.document.getElementById('myIFrameID').reload();但我收到一条错误消息:Uncaught TypeError: Cannot call method 'getElementById' of undefined
  • 弹出窗口和主窗口是否来自同一个域?如果不是,您正在访问浏览器的安全模型。如果这就是你要打的,谷歌那个“同源策略”或“XSS”,因为那里已经有很多很好的解释了。

标签: javascript jquery internet-explorer popup window


【解决方案1】:

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

演示来源:

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      你试过了吗:

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

      【讨论】:

        【解决方案4】:

        我在这里重建了这个功能: 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 查询并将结果显示在主窗口中),所以我快速浏览了一下 ;)

        【讨论】:

          【解决方案5】:

          我发现了一个很棒的 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 页面中),或全屏显示(灯箱克隆安装在父页面中)。

          【讨论】:

            猜你喜欢
            • 2013-05-03
            • 1970-01-01
            • 1970-01-01
            • 2016-08-11
            • 2011-03-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多