100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > iframe 父子页面传值 postMessage

iframe 父子页面传值 postMessage

时间:2018-08-16 04:00:13

相关推荐

iframe 父子页面传值 postMessage

使用postMessage给父子页面传值,可以解决跨域问题

父传子:iframe.contentWindow.postMessage()子传父:尽量放在window.onload里面。window.parent.postMessage()接收数据:window.addEventListener(‘message’, event => {})

遇到的问题:

子页面中有登录,保存了cookie,但是谷歌浏览器的iframe中并不能成功取到。

解决方案:

1. 使用https协议2. 保存cookie的时候修改设置:SameSite和Secure this.$cookies.set('token', res.data.auth_token, null, null, null, true, 'None');

父级

(vue项目)

<iframe id="myIframe" :src="iframeUrl + '/test.html'" width="80%" height="60%" style="position: absolute;top: 0;left: 0;"></iframe>data() {return {iframeUrl : 'http://127.0.0.1:5500'}},mounted() {this.iframe = document.getElementById('myIframe').contentWindow;window.addEventListener('message', this.getChildMsg, false);},methods: {getChildMsg() {if (event.origin == this.iframeUrl) { // 校验一下来源console.log('父页面获取到信息是:' + event.data);}},// 点击传值给子页面sendToChild() {this.iframe.postMessage('父级点击了xx,传给子页面xx', this.iframeUrl); // 第二个参数可是具体域名或*(传递给所有的窗口)}}

子页面

(child.html)

<button id="btn" data-id="id1">点击传给父组件</button><script>window.onload = () => {// console.log('onload加载完了');document.getElementById('btn').addEventListener('click', params => {window.parent.postMessage('子页面点击按钮的id是' + params.target.dataset.id, '*');});};window.addEventListener('message', function (event) {if (event.origin == 父页面域名) {console.log('子页面获取到的信息是:' + event.data);}});</script>

结果:

谷歌浏览器 iframe中设置cookie的参考:/ysyysjbama/article/details/108061969?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduend~default-3-108061969.nonecase&utm_term=iframe%E4%B8%8D%E8%83%BD%E8%AE%BE%E7%BD%AEcookie&spm=1000.2123.3001.4430

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。