3

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

4

2 回答 2

3

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

如果您的 iframe 在同一个域 && 端口 && 方案上,您可以这样做:

<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>

更新忽略了“来自不同域”-问题的一部分,相应地更新了帖子。

于 2012-11-12T20:33:54.863 回答
1

您应该查看Intersection Observer API。我能够让它适用于两个不同的域。

像这样的东西对我有用:

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);
于 2021-04-07T14:52:55.547 回答