Javascript 是否有办法确定iframe是否可见/处于活动状态

Javascript 是否有办法确定iframe是否可见/处于活动状态,javascript,iframe,cross-domain,Javascript,Iframe,Cross Domain,我有一个iframe,它在站点上运行(使用不同的域)。我可以在iframe中知道用户是否可以使用它,或者该iframe“所在”的页面是否处于活动状态。 谢谢。这实际上是不可能的,因为如果您在不同的域/端口/方案上,您无法从框架本身访问嵌入框架的主页 如果iframe位于同一域&&port&&scheme上,则可以执行以下操作: <html> <body> <iframe src="frame.htm" id="myframe" style="display:

我有一个iframe,它在站点上运行(使用不同的域)。我可以在iframe中知道用户是否可以使用它,或者该iframe“所在”的页面是否处于活动状态。
谢谢。

这实际上是不可能的,因为如果您在不同的域/端口/方案上,您无法从框架本身访问嵌入框架的主页

如果iframe位于同一域&&port&&scheme上,则可以执行以下操作:

<html>
<body>
    <iframe src="frame.htm" id="myframe" style="display:block"></iframe>
</body>
</html>

以及frame.htm:

<script>
    var is_hidden = parent.document.getElementById("myframe").style.display == "none";
    alert(is_hidden ? "I am hidden" : "I am visible");
</script>

var is_hidden=parent.document.getElementById(“myframe”).style.display==“无”;
警惕(你是隐藏的吗?“我是隐藏的”:“我是可见的”);
更新忽略了问题中的“来自不同领域”部分,相应地更新了帖子。

你应该检查一下。我能够让它在两个不同的领域工作

像这样的事情对我很有用:

function handleIntersect(entries, observer) {
  console.log('intersecting', entries[0].isIntersecting, 'visible', entries[0].isVisible);
}

let observer;

let options = {
  root: null,
  rootMargin: "0px",
  threshold: [0.5]
};

observer = new IntersectionObserver(handleIntersect, options);
// The DOM element here should be a div that captures the whole content of the iframe.
observer.observe(DOM_ELEMENT);

该问题表示使用不同的域,因此将从中获取权限错误。
display:none
display:block
都将计算为
true
。忘记,要将
==“none”
添加到末尾,请添加它。感谢您的指点。您可以检查iframe是否可单击。例如
document.elementFromPoint(0,0)
如果该像素不可见,则返回
null
。虽然它也会返回
null
如果iframe只是从屏幕上滚动开…这听起来是一个很好的观察方向,但是document.elementFromPoint(0,0)在我检查的所有场景中都会返回标记(iframe被滚动开,页面没有焦点,…),你能更具体一点吗?我在IE9中做了一个快速测试,FF,Chrome和Opera,并且只有在框架页面中启动
window.onload
时才使用
display:none/block
。IE和Chrome返回的正是我所期望的(
null/HTMLElement
)。FF在
none
时出错,只有Opera始终返回
HTMLElement
。不幸的是,我不能跨域测试,只能在本地测试。我没有测试滚动,这是基于我以前的
elementFromPoint()
经验的猜测。请注意,此检查应该在
iframe
中进行,而不是在任何主页中。看来我浪费了您的时间,对此表示抱歉。这实际上只在IE中有效。其他浏览器似乎可以在屏幕外以及设置了
可见性:hidden
时找到该元素。对于Opera,它总是找到元素:(。中描述了与IE相同的行为,但显然这不是真的。