【问题标题】:Reload iframe from pop-up window opened from iframe从 iframe 打开的弹出窗口重新加载 iframe
【发布时间】:2012-04-03 22:02:57
【问题描述】:

问题

如何使用 JS 关闭一个弹窗,从 iframe 打开,然后重新加载 iframe(不是整个页面)

做了什么

我在 iframe 中打开了一个弹出窗口。 一旦这个弹出窗口到达某个页面,我希望这个弹出窗口重新加载 IFRAME,然后关闭弹出窗口。

我现在拥有的

<script type="text/javascript">
window.opener.parent.location.href="'.urldecode($_GET['return_url']).'";
window.close();
</script>

现在发生了什么

弹出窗口成功关闭。整个页面被发送到 iframe URL,而不是仅仅发送到 iframe...

编辑: 我的尝试:

  window.opener.location.href="'.urldecode($_GET['return_url']).'";

但是,由于 iframe 或页面不会重新加载,并且不会关闭弹出窗口,因此它不会越过这一行。在 Chrome 中,窗口关闭,但 iframe/页面不会重新加载

原来我访问的页面属于不同的域(属于我们网站的不同域)。但是,为什么这会起作用

window.opener.parent.location.href="'.urldecode($_GET['return_url']).'";

而不是

window.opener.location.href="'.urldecode($_GET['return_url']).'";

??????

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    让我们在这里分解你的代码:

    window.opener.parent.location.href="'.urldecode($_GET['return_url']).'";
    
    • window 表示当前弹窗的window 对象。到目前为止很好。
    • .opener 表示打开此窗口的窗口对象,即您要重新加载的 iframe。还是不错的。
    • .parent 表示 iframe 的父级,即整个窗口。这是你的问题。

    应该是:

    window.opener.location.href="'.urldecode($_GET['return_url']).'";
    

    【讨论】:

    • 这是我原来的,但是有错误。在 Firefox 中,当我使用 window.opener.location.href="'.urldecode($_GET['return_url']).'";由于 iframe 或页面不会重新加载,它不会越过这一行,并且它不会关闭弹出窗口。在 Chrome 中,窗口关闭,但 iframe/页面不会重新加载
    • @NolanKnill 听起来像是跨站点脚本错误。您的 iframe 和弹出窗口必须共享相同的document.domain,否则您不能在它们之间执行 javascript。
    • 它们属于同一个域,但是如果是跨站点脚本,window.opener.parent.location.href 不会工作吗?
    • 实际上他们不是同一个域...但是为什么会这样:window.opener.parent.location.href="'.urldecode($_GET['return_url']).'"; window.close();
    • @NolanKnill 一个窗口和其中的 iframe 不一定是同一个域。在处理跨站脚本时,很多属性可以读取但不能设置,有些属性不能读取或设置。在这种情况下,不允许设置不同域的location.href,但访问parent 属性是。
    猜你喜欢
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    相关资源
    最近更新 更多