检查父窗口是否为iframe

Moh*_*Ram 51 javascript iframe jquery

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

说明:

我的主页home.html包含iframe

<iframe src="sample.html"></iframe>
Run Code Online (Sandbox Code Playgroud)

我需要检测if home.html(即:parent sample.html)是否在iframe中.

代码sample.html:

if(self==window)
{
    alert('home.html is not in iframe');
}
else
{
    alert('home.html is in iframe');
}
Run Code Online (Sandbox Code Playgroud)

我的问题不是重复的.这是一个不同的案例.

Dr.*_*lle 105

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

if(self==top)
Run Code Online (Sandbox Code Playgroud)

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

if(parent==top)
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你想检查父窗口是否在一个框架内,只需使用`if(parent == top)`(如果父窗口不是框架,则返回true) (2认同)
  • 如果您希望您的框架可能位于域外的框架中,则测试 top 并不是那么好。例如,您的网站通过框架/ iframe 引用托管在其他人的网站上(有时会发生在博客模板网站等上)。由于“top”可能位于不同的域中,因此测试 parent == top 可能会引发跨域错误。尝试在容器框架中放置一个标记并进行测试(例如 if (parent.myVar) (2认同)

小智 35

检查是否window.frameElement为null并查看其nodeName属性是否为"IFRAME":

var isInIframe = window.frameElement && window.frameElement.nodeName == "IFRAME";
Run Code Online (Sandbox Code Playgroud)

  • 这对于跨源 iframe 失败。返回嵌入窗口的元素(例如 &lt;iframe&gt; 或 &lt;object&gt;),如果元素是顶级元素或嵌入到具有不同脚本源的文档中,则返回 null;也就是说,在跨域情况下。https://developer.mozilla.org/en-US/docs/Web/API/Window/frameElement (2认同)

Sum*_*han 24

var isInIFrame = (window.location != window.parent.location);
if(isInIFrame==true){
    // iframe
}
else {
    // no iframe
}
Run Code Online (Sandbox Code Playgroud)

  • 有一个边缘情况,这不起作用:如果您已将同一页面加载到包含iframe的iframe中. (5认同)
  • 或者只是`var isInIFrame = window.location!== window.parent.location;`也可以. (2认同)
  • 此外,跨域或类似的保护将导致访问window.parent属性时出现脚本错误 (2认同)