使用iframe遇到的坑
最近项目中有业务场景使用iframe,遇到了一些问题,归纳总结下,做个笔记。
如果有大佬知道其他坑,评论区留言~
1、iframe样式变大
iframe在ios12及12下的系统中,样式会莫名其妙放大。
原因是iframe会根据内部元素的全尺寸来计算大小,overflow: hidden等隐藏的部分也进入计算范围。
解决方法:
iframe.setAttribute('style', 'width: 1px; min-width: 100%; *width: 100%;')
if(isIOS()) {
iframe.scrolling = 'no'
}
2、跨域通信问题
如果父页面与iframe需要通信,使用postMessage
postMessage使用时需注意
- 父 传 子,postMessage的调用者应该是
iframe - 子 传 父,postMessage的调用者应该是
top
// 父 —> 子
iframe.postMessage(message, targetOrigin)
// 子 -> 父
top.postMessage(message, targetOrigin)
!!注意,postMessage第二个参数不要省略,可以传'*'来表示无限制,如果不传,在低版本浏览器上会报错