我需要检测从另一个域加载的 iframe 是否在视口中。
这在 Chromem、Firefox 和 IE 中运行良好,称为 Intersection Observer。但是,这在 Safari 中不起作用。
已经为此创建了一个 polyfill:Github 链接,并且应该也可以在 Safari 上运行。
我使用以下代码对其进行了测试:
站点 A:
<html>
<head>
</head>
<body>
A lot of text here so the iframe is not inview.
A lot of text here so the iframe is not inview.
<br>
<br>
.
.
.
.
.
.
.
<br>
A lot of text here so the iframe is not inview.
<iframe src="//siteB.com/test.html" frameborder="0" border="0" scroll="no" scrolling="no" width="300" height="250" style="border: 0px; overflow: hidden !important;"></iframe>
</body>
</html>
站点 B:
<html>
<head>
<script src="intersection-observer.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function(event) {
//do work
var io = new IntersectionObserver(
entries => {
console.log(entries);
if (entries["0"].isIntersecting) {
alert("inview");
}
},
{
/* Using default options. Details below */
}
);
// Start observing an element
var img1 = document.getElementById("img1");
console.log(img1);
io.observe(img1);
});
</script>
</head>
<body>
<img id="img1" src="motor.gif" style="position:absolute; top:0px; left:0px"/>
</body>
</html>
但是我已经在 Iphone 6 上对此进行了测试,但是它会立即发出警报,并且在单击警报后它在向上和向下滚动时不再显示。
他们包含的 intersection-observer-test.html 页面返回了所有 25 个测试的通行证。
有人对此有解决方案吗?