【问题标题】:Check if parent window is iframe or not检查父窗口是否为 iframe
【发布时间】:2011-06-03 10:18:37
【问题描述】:

如果父级本身也在 iframe 中,我如何从 iframe 中的页面判断?

解释:

我的主页home.html 包含一个 iframe

<iframe src="sample.html"></iframe>

我需要检测home.html(即:sample.html 的父级)是否在 iframe 内。

sample.html中的代码:

if(self==window)
{
    alert('home.html is not in iframe');
}
else
{
    alert('home.html is in iframe');
}

我的问题不是重复的。情况不同。

【问题讨论】:

  • 有点不清楚... iframe 中的页面中是否有 iframe?是否要检查页面是否在 iframe 中,或者包含 iframe 的页面是否在 iframe 中?
  • 那有什么不同呢? :s
  • 一旦 home.html 是 iframe,那么我需要检测 home.html 是来自 sample.html 的 iframe。
  • 没有一个答案有效

标签: javascript jquery iframe


【解决方案1】:

如果窗口不是框架/iframe,则为 true:

if(self==top)

如果您想查看给定窗口的父窗口是否为框架,请使用:

if(parent==top)

这是top(窗口层次结构中最顶层的窗口)和另一个窗口对象(selfparent)的简单比较。

【讨论】:

  • 如果要检查父窗口是否在框架内,只需使用if(parent==top)(如果父窗口不是框架,则返回true)
  • 你可以理解我的问题。如果(parent==top) 对我有用,谢谢你
  • 编辑你的答案好像(父母==顶部)
  • 你刚刚为我节省了一个小时。谢谢。
  • 如果您期望您的框架可能存在于域外框架中,那么测试顶部并不是那么好。例如。您的网站通过框架/iframe 引用托管在其他人身上(有时会发生在博客模板网站等情况下)。由于“top”可能位于不同的域中,因此测试 parent == top 可能会引发跨域错误。尝试在容器框架中放置一个标记并对其进行测试(例如 if (parent.myVar)
【解决方案2】:

检查window.frameElement是否不为空,并查看其nodeName属性是否为“IFRAME”:

var isInIframe = window.frameElement && window.frameElement.nodeName == "IFRAME";

【讨论】:

  • 这个答案很棒,因为它包含一种简单直接的方式来访问包含当前页面的iframe 元素(当它在其中加载时)。
  • 我同意@Oliver 的观点。这种方式比上面的其他两个答案和我见过的处理这个问题的任何其他策略要简单得多。这应该是公认的答案...
  • 跨域 iframe 失败。返回嵌入窗口的元素(例如
【解决方案3】:
var isInIFrame = (window.location != window.parent.location);
if(isInIFrame==true){
    // iframe
}
else {
    // no iframe
}

【讨论】:

  • 或者只是 var isInIFrame = window.location !== window.parent.location; 也可以。
  • 有一个边缘情况,这不起作用:如果您已将同一页面加载到包含 iframe 的 iframe 中。
  • 另外,跨域或类似的保护在访问window.parent属性时会导致脚本错误
  • @oriadam 如果它抛出错误,你可以假设它在 iframe 中
猜你喜欢
  • 2012-09-02
  • 1970-01-01
  • 2011-10-30
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
相关资源
最近更新 更多