iframe的使用,及iframe页面之间的数据通信

<iframe> 标签
一、作用:可以将一个网页页面通过iframe嵌入到另一个网页页面中;
二、基础属性:
width: 规定<iframe>的宽度;
height:规定<iframe>的高度;
name:规定<iframe>的名称;
marginheight:规定<iframe>的顶部和底部边距;【HTML5不支持】
marginwidth:规定<iframe>的左侧和右侧边距;【HTML5不支持】
src:规定被嵌入当前页面的子页面地址【*tip:src中被嵌入的子页面地址要和父页面的地址是同源的,否则,会打不开子页面】;
以上这些基础数据是常用的,剩余的一些属性如果项目需要,可以去网上查询;
三、<iframe> 页面之间的数据通信
其实分享iframe的数据传递,主要是因为,我在开发地图图层的下钻页面的时候,遇到了这样一个问题;
1、场景:当点击某个地图点位的时候,会通过iframe嵌入打开一个对应的后台管理的表格页面,记录该点位中对应的一些信息。再点击该表格中的某条信息的时候,还需要打开一个弹窗显示该表格中的某条信息的详情页面;
2、问题:当点击表格中的查看时,这个操作相当于是在后台管理的页面中的交互,如果,详情是个可移动的弹窗,会发现这个弹窗无法移出子页面;
3、弹窗无法移出子页面的原因:因为,通过iframe嵌入的子页面,其实也是一个完整的页面,它也有自己的window、document等内容。父页面iframe设置的宽高是多少,就相当于子页面的屏幕大小是多少,简单来说iframe就相当于是子页面的显示器;所以,子页面中的弹窗无法移出iframe设置的宽高;
4.怎么让子页面的详情弹窗,不受iframe的限制,能在父页面中正常拖拽移动:
我的想法是在后台管理里给有弹窗的详情页面设置路由。在后台管理里还是以弹窗的形式展示详情页面,但是,当在地图中点击 "查看" 时,将详情页面的路由拼接域名,以及要传的值,通过iframe的数据通信,传到父页面中,父页面再通过一个弹窗包裹iframe在父页面中显示详情页面的内容即可;
5.iframe中的数据通信
(1)父页面传值给子页面
① 先获取有子页面src地址的iframe标签的dom
--- 可以通过<iframe $ref="iframe">绑定;
--- 在js中通过 let iframeDom = this.$refs.iframe  //获取到iframe的dom
--- 通过 let _window = iframeDom.contentWindow  // 获取到被嵌套子页面的window对象
--- 通过  _window.postMessage("传给子页面的值","规定子页面的地址,如果为*则所有的地址都可以接收传的值")
--- 子页面需要在mounted钩子函数中通过
window.addEventListener("message",(e)=>{ console.log(e.data)  })//通过事件监听window的message事件,参考上述写法用e.data 获取到父页面传过来的值;

传值给子页面


子页面接收值


--- 【*tip】注意:这里在父页面传值的时候有个坑,如果,你按上述的方式传值的话,子页面在通过window.addEventListener("message")监听message事件的时候,首次打开子页面的时候,会自动触发一次该事件的监听
打印的内容为:{type:"webpackOk",data:undefined},这是因为,我们的项目是通过webpack跑的,所以,首次通过window.addEventListener("message")监听message事件的时候,会自动触发一次;
处理这种情况,你可以在通过window.postMessage传值的时候,给第一个值以一种对象的方式传过去,对象中定义一个type。接收的页面在接收的时候,通过判断type的值,来接收所传的值,以及接受值后的一些逻辑处理;
例如: 父页面传值: window.postMessage({type:fromParent; value:"父页面传的值" }, "*")
            子页面接收值: window.addEventListener("message",e=> { if(e.data.type === "fromParent"{ console.log(e.data.value ) })});
(2)子页面传值给父页面
其实子页面传值给父页面也是通过window的postMessage方法实现的,不过,这里要多考虑的一个地方是,当嵌套了几层的iframe页面的时候,我是要把值直接传给最外层页面,还是上一层页面。如果,要是传给上一层页面可以用window.parent.postMessage({type:"toParent",value:"子页面传的值"}, "*") 的方法传给上一层页面,如果想直接传给最上层的页面可以用:window.top.postMessage({type:"toTop",value:"下级页面传的值"}, "*") ,接收的页面同样也是在mounted中通过window.addEventListener() 接收;               

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容