在web中,为了丰富我们的内容,往往需要引用其它HTML文件,这时候就需要用到 iframe 标签,本文就主要记录一下使用iframe所需要注意的问题
iframe 所使用的环境(笔者所遇到的)
1. web代码兼容 PC端 和 移动端,这时候就想在移动端时把页面限制在固定的宽高范围中,于是就使用 iframe 把 相关页面限制在其中
2. web引用别人的 HTML 内容,就使用iframe 来实现
1. 如何判断当前是否在iframe中
// 1 if (self.frameElement && self.frameElement.tagName == "IFRAME") { alert(‘在iframe中‘); } // 2 if (window.frames.length != parent.frames.length) { alert(‘在iframe中‘); } // 3 if (self != top) { alert(‘在iframe中‘); }
说明:
解释:window、top、parent、self 之间的联系和区别
2. iframe 和 它的父窗口如何通信
注意有两种情况:
var obj=document.getElementsByTagName("iframe")[0].contentWindow; var ifmObj=obj.document.getElementById("childNode");
var obj=document.getElementsByTagName("iframe")[0].contentWindow; obj.parentFunc();
// 向父窗口传值 window.parent.postMessage({code: 1, msg: ‘向父窗口传值‘},*); // 向iframe传值 document.getElementsByTagName("iframe")[0].contentWindow.postMessage({code: 2, msg: ‘向iframe传值‘},*); // 接收传值 window.addEventList(‘message‘, (e) => { try{ if (e.data type e.data ===‘string‘ ) { console.log(e.data); } } catch (err) { console.log(err) } });
event.source
:发送消息的窗口,可以通过区分网址来接收消息event.origin
: 消息发向的网址,同上event.data
: 消息内容说明:
otherWindow.postMessage(message,targetOrigin,[transfer]);
这个值最好始终存在,而不是*
,这样能有效的避免第三方截获Transferable
对象,这些对象的所有权将被转移给消息的接收方,而发送一方将不再保有所有权。
原文:https://www.cnblogs.com/nangezi/p/11703143.html