让 iFrame
元素的尺寸与内容页面尺寸大小相同是一个非常常见的需求,但是实际实现起来是非常麻烦的,昨天维护博客留言板的时候顺把留言板改成了有留言就自动调整 iFrame 大小的样子,其中遇到了几个技术点,考虑到可能有遇到类似需求的朋友,所以做一个记录方便查阅 (<ゝω・)☆
解决这个问题的主要技术难点包括:
- 框内和框外的跨域通讯问题,当二者不处于同一域下不能直接操作彼此的元素或者读取信息;
- 当框内文档大小发生变化的时候如何进行捕捉。
为了解决这两个问题,我们使用两个API:
- 利用 postMessage API 来确保跨域也可以进行通信;
- 利用 Mutation Observer 捕捉文档结构的变化。
代码
框内(假设页面长度由 #abcde
决定):
1 | //确定影响页面长度的元素 |
框外(假设 iFrame
元素的选择器为 #ghijk
):
1 | // 找到 iFrame 元素 |
如果你希望确保发来的信息的确是来自目标 iFrame
而不是什么其他的页面,我们可以通过事件回调传入的 e.origin
进行判断,它看起来长这样:
1 | // 假设会向父级页面传参的 iFrame 为 https://example.com/ |
以上就是本次的介绍,Happy Coding ヽ( ° ▽°)ノ
Comments
No comments here,
Why not write something?