【问题标题】:Need to break out of iframe after content in iframe is submittediframe中的内容提交后需要跳出iframe
【发布时间】:2011-05-28 00:36:06
【问题描述】:

好的,我在页面上使用 iframe。 iframe 中的内容我无法控制,并且正在与 Adob​​e Flash 程序一起使用。

但是,一旦在 iframe 中提交了表单(同样我无法控制),它会加载一个页面,我确实可以控制,但是该页面在 IFRAME 中而不是在 iframe 上中断那个页面。如何仅在该页面上跳出 iframe??

我假设需要一些 Javascript,但这段代码不好:

if (top.location != self.location) {
top.location = self.location;
}

使用此代码加载网站的主索引页面。我需要它在提交表单后加载页面并打破它。同样,在 iframe 中提交表单后,我可以访问在 iframe 中加载的页面。

请帮帮我。

也许涉及到一种棘手的方法?例如,在加载页面时?或者以某种方式检查 iframe 是否已提交?我控制我网站上的两个页面(最初保存 iframe 的页面和 iframe 提交到的页面),而不是 iframe 内容。

谢谢:)

【问题讨论】:

  • 你是把代码放在外页还是iframe的页面?另外,您是否会遇到由具有不同域的外部页面和内部页面引起的安全问题?

标签: javascript html iframe


【解决方案1】:

我相信你想要这个

if(this != top){
  top.location.href = this.location.href;
}

爆发

它可能也需要文档参考...我不在电脑前检查。

if(this != top){
  top.document.location.href = this.document.location.href;
}

【讨论】:

  • 该代码应该放在哪里?在头上?它怎么知道this 是什么?或者 Javascript 中的 top 是什么?它会自动识别它,还是必须定义它?
  • 这不起作用,它仍然将我带到站点索引而不是 iframe 转到的 URL。
  • 网页的网址是什么?只有一帧吗?我问是因为我已经使用过这个代码几十次了,而且我知道它可以工作。是的,您可以将它放在头部或主体中... top 是对最顶层窗口的全局引用,这会自动引用“this”窗口。 PS我可能有点搞砸了,它可能需要全名中的“文档”。
  • argg,这仍将我带到站点索引而不是该页面。也许你愿意来看看我?让我知道,我会给你一些链接。我已经测试了 this 和 top 的输出,并且 href 都是正确的,但它会将我重定向到我网站的主页... arggg。
  • 好的,我得到它的工作,谢谢,我有代码可以防止这种情况发生。非常感谢!!!
【解决方案2】:

对我有用的是:

(function () {
    'use strict';
    console.log('window.top.location', window.top.location);
    console.log('window.location', window.location);

    if (window.location !== window.top.location) {
        window.top.location = window.location;
    }
})();

灵感来自https://css-tricks.com/snippets/javascript/break-out-of-iframe/

【讨论】:

    【解决方案3】:

    css-tricks.com 的 Chris Coyier 对如何执行此操作进行了很好的简洁说明。

    一种方式对观察者来说更清晰一些(就像生产 Javascript 代码可以说是“清晰”的一样多):

    (function(window) {
      if (window.location !== window.top.location) {
        window.top.location = window.location;
      }
    })(this);
    

    另一个更短,但也更棘手且不太明显:

    this.top.location !== this.location && (this.top.location = this.location);
    

    再次强调应得的功劳:这些 sn-ps 不是我写的,我只是将它们传递出去,因为它们回答了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-19
      • 2018-05-21
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      相关资源
      最近更新 更多