javascript - iframe 可以检查自己是否在视口中吗?
问题描述
我正在iframe
用一个小的 HTML5 视频创建一个。除非在视口中,否则视频不应开始播放iframe
。
我注意到这并不像我想的那么容易,因为iframe
它就像一个沙盒环境。是否有可能iframe
知道它是否在视口中?
解决方案
检查元素是否在视口中
在这里,您可以找到一个很好的实现来检查元素是否在视口中:
function isInViewport(element) {
const rect = element.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
);
}
到达父窗口
在里面iframe
你可以像这样到达父母window
:
if (window.parent.isInViewport(document.querySelector('iframe'))) {
//do something
}
(为了简单起见,在上面我在iframe
父级中搜索第一个,您可能需要更改您的选择器)window
iframe
然而,现代浏览器只有在指向的页面与主页指向的相同域时才允许这种通信。如果两个页面属于不同的域,那么现代浏览器会抛出CORSS 错误。
作为替代,您可以在主页和加载到其中的页面之间进行消息传递iframe
,但为此,主页的开发人员需要合作。
推荐阅读
- javascript - node.js和mongoDB登录后,如何创建一个所有用户都有自己的账号页面的用户注册系统?
- javascript - 为什么 vue watch 对象可以使用非字符串作为键?
- android - Kotlin 类名错误
- javascript - showCloseButton react-bootstrap-sweetalert 未显示
- git - GitLab 将自定义包链接到当前项目
- java - Spring无法识别实体参数
- javascript - 从字符串数组应用多个 CSS 规则?
- typescript - 创建省略所有函数属性的对象类型
- django - django 错误无法导入名称“RemovedInDjango30Warning”
- javascript - JavaScript 日历表格样式