使用iframe遇到的坑

899 阅读1分钟

使用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第二个参数不要省略,可以传'*'来表示无限制,如果不传,在低版本浏览器上会报错