vue中iframe的使用及说明
短信预约 -IT技能 免费直播动态提醒
关于iframe的使用
iframe在同域时能自由操作iframe和父框架的内容(DOM),在跨域时可以实现页面跳转。
<iframe id="iframe" :class="lazy" data-src="iframeclass="lazy" data-src" style="height: calc(100% - 50px)" width="100%" frameborder="0"></iframe>
获取iframe里面的内容
iframe.contentWindow
, 获取iframe的window对象iframe.contentDocument
, 获取iframe的document对象
const _iframe = document.getElementById('iframe').contentWindow
CDM跨域
如果你设置的iframe的域名和你top window的域名完全不同,可以使用CDM(cross document messaging)进行跨域消息的传递。
发送消息: 使用postmessage方法
postMessage(message, targetOrigin)
message
: 传递给iframe的内容, 通常是string,最好不要传object对象,需要传对象时,使用JSON.stringfy转换。targetOrigin
: 接受你传递消息的域名,可以设置绝对路径,也可以设置""或者"/"。 表示任意域名都行,"/"表示只能传递给同域域名。
_iframe.postMessage(JSON.stringify(_obj), '*')
接受消息: 监听message事件
当targetOrigin接受到message消息之后,会触发message事件。 message提供的event对象上有3个重要的属性,data,origin,source.
window.addEventListener('message', function (event) {
console.log(event)
if (event.origin === window.callBackUrl.iframeclass="lazy" data-src) {
_this.childData = event.data
console.log(event.data)
_this.saveForm()
}
})
使用iframe的总结
需求描述:在后台管理系统中需要预览配置的数据在手机上显示的样式,方便后台管理人员操作,因为预览的内容比较多,h5已经写好了一套代码,所以利用iframe将h5的页面展示引入到后台
代码展示
iframe:
<iframe
id="iframe"
ref="iframe"
frameborder="0"
class="iframe"
:class="lazy" data-src="class="lazy" data-srcH5" //class="lazy" data-srcH5:预览页面的地址
/>
class="lazy" data-srcH5:'/iframeH5/preview',
父页面给子页面传值:
var iframe = document.getElementById('iframe');
var msg = {name:'张三'}
var childDomain = 'http://localhost:80/' //预览页面的域名
iframe.contentWindow.postMessage(msg, childDomain);
子页面给父页面传值:在mounted中调用,避免未渲染完成,无法拿到数据
//拿到父页面传递的值
window.addEventListener('message', (obj) => {
this.obj = obj.data;
console.log('拿到数据了吗', this.obj );
}, false);
//将预览成功的信息返回给父页面
window.parent.postMessage({
data: {
code:'success'
}
}, '*');
父页面监听子页面返回的成功信息,做进一步操作
window.addEventListener('message', this.handleMessage);
// 监听h5页面的通信
handleMessage (event) {
const data = event.data.data;
if(data && data.code === 'success') {
。。。。。。
}
},
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341