日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iframe 覆盖父页面_一次iframe子页面与父页面的通信

發(fā)布時間:2023/12/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iframe 覆盖父页面_一次iframe子页面与父页面的通信 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

事件回顧:

收到需求,說是要在別人的系統(tǒng)里嵌入目前由我維護的系統(tǒng),嵌入的邏輯不多,只有一個創(chuàng)建流程。

剛開始覺得沒什么,不就是你改改,我改改,你給我url加個參數(shù),我知道是你調(diào)用,修改下頁面balabal。。。

奈何想法總是趕不上需求。

我要嵌入的頁面大概是這樣的↓↓↓。一共有三步,切換步驟不刷新頁面

要嵌入到對方的頁面大概如下↓↓↓。是在一個彈出的modal框里,第一步是對方的步驟,后三步由我們嵌入。

對方的需求:步驟條和下方控制按鈕放在他們頁面。跟我想的完全不一樣。于是開啟了這次旅程。

分析需求:

既然步驟條在對方頁面,那每一步就需要我們提供一個新的路由對應一個新頁面去展示,這很容易想到。但我們系統(tǒng)設(shè)計之初,這三步是一個連貫的操作,數(shù)據(jù)會向下流到最后一步才一次性提交給后端。而且下方控制下一步的按鈕放在對方頁面,所以就算我們提供新頁面也滿足不了需求。

不同路由不能滿足,那同一個路由不同hash呢?這里要感謝【守衛(wèi)】大哥,給了一個打開新世界的思路。

同一個路由改變hash值。頁面確實不會刷新。那么對方點擊下一步時,只要動態(tài)改變iframe的url hash,我們這里再監(jiān)聽hash值變化,事先約定好特定值,進而來回切換每一個步驟。嗯,似乎一切都是那么美好。但光想是不夠的。Task is cheap,show me the code。所以,我簡單模擬了一個iframe環(huán)境,嵌入我們系統(tǒng)的頁面。一切都很順利。但我忽略了一點。

這三步中的每一步不是想跳就跳的。每一步的表單都有校驗階段,校驗失敗我們肯定不會進行下一步。所以這就出現(xiàn)了一個問題:我們?nèi)绾瓮ㄖ疙撁姹卷撁嫘r炿A段是否通過呢?因為步驟條在對方頁面,所以我們必須保證我們的實際步驟和對方的步驟條保持同步。

變更需求:

經(jīng)過一系列討論,我們決定找他們變更他們的需求。然而對方也很爽快,或許是因為對方不想在這個小需求上花太多時間,或許是因為我們這次是兩個人,氣勢十足。

最終決定步驟條和按鈕都可以放在我們頁面,但是最后一頁必須有一個返回按鈕來返回他們的頁面。

iframe里的按鈕如何改變?yōu)g覽器的路由呢?這里還要感謝【守衛(wèi)】大哥,真是字如其花名。提出a標簽的target屬性或許有幫助。點擊查看target的四種值及含義,這里不詳細講了。

a標簽target屬性的_top值可以使a標簽在iframe里改變?yōu)g覽器的路由。

至此,所有問題似乎以對方的妥協(xié)而告終。

但這不是架構(gòu)組的終點。

繼續(xù)思考:

現(xiàn)在的情況是:步驟條和按鈕都在我們頁面,就是說我們不需要做太多的修改,只需要在最后一個頁面加一個a標簽具有特定target值的屬性來改變?yōu)g覽器的URL,以此來實現(xiàn)關(guān)閉彈框modal并且返回到對方的列表頁。

這里有一個流暢度的問題。本來到第二步突然切換到iframe,頁面會有短時間空白,再加上最后一步跳回列表頁,又刷新了整個頁面,用戶體驗非常不好,我都感覺不好。

切換到iframe時的空白只能通過我們頁面的首屏性能優(yōu)化或者微前端的方式,但時間緊任務(wù)重。性能優(yōu)化和微前端不可能半天內(nèi)搞定,所以第二步優(yōu)化先放棄,那最后一步能不能優(yōu)化呢?

又想到了hash值。既然動態(tài)改變iframe url hash值不會導致iframe里頁面的刷新,那么我通過上方提到的a標簽來改變父頁面的hash值呢?貌似又發(fā)現(xiàn)了新大陸。

說干就干,找了兩個系統(tǒng)測試了一番,結(jié)果跟預想的一樣。

馬上通知對方開發(fā)人員,提出了這個方案,對方也欣然接受。

至此實現(xiàn)了最后一個步驟返回父頁面列表頁時,無感知關(guān)閉彈框modal。

上線后思考:

最后的方案雖然是步驟條和按鈕都在我們頁面,但根據(jù)上面提到的解決無感知關(guān)閉彈框的方案,步驟條和按鈕完全可以放到對方頁面,就像對方一開始提的需求一樣。

具體方案是:父頁面點擊下一步按鈕,改變子頁面hash值,子頁面監(jiān)聽hash值變化,走校驗邏輯。

校驗合格,通過代碼控制a標簽點擊來改變父頁面hash值,父頁面監(jiān)聽hash值變化,進而控制步驟條是否到下一步。

校驗不合格,則不改變父頁面hash值,則步驟條不動。

不過這種方式對于頁面原有hash值有侵入。我們兩個系統(tǒng)都沒有使用hash所以這個方式可行。對于那些原有頁面依賴hash展示的系統(tǒng),這種方式并不適用。

小結(jié):

iframe的父子頁面通信,除了postMessage等方式,相互改變hash值也是不錯的選擇。

父頁面通過JavaScript改變iframe的src的hash,同時監(jiān)聽自己的hash變化。

子頁面通過下方的方式改變父頁面的hash,同時監(jiān)聽自己的hash變化。

以此可以延伸到更多的場景。當父子頁面需要傳送很復雜的數(shù)據(jù),可以把數(shù)據(jù)轉(zhuǎn)成字符串放到hash上。

注意:

hash變化會在歷史記錄生成一條數(shù)據(jù),導致用戶回退時的頁面可能與預期不符,所以這個方式要視情況使用。

同時還要注意,hash功能本身是為了使瀏覽器能定位到頁面特定的元素↓↓↓

所以改變hash時要注意頁面上不能有有反應的元素。

總結(jié)

以上是生活随笔為你收集整理的iframe 覆盖父页面_一次iframe子页面与父页面的通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产sm在线观看 | 国产999精品久久久久久 | 成人av免费网站 | 乱淫av| 欧美午夜寂寞影院 | 亚洲国产无线乱码在线观看 | 国产网站视频 | 成年人黄色一级片 | 国产最新自拍视频 | 黄色资源网 | 日韩激情床戏 | 乳揉みま痴汉4在线播放 | 欧美亚洲一 | 日本美女一区二区 | 围产精品久久久久久久 | 男生尿隔着内裤呲出来视频 | 制服丝袜国产在线 | 成人av动漫 | 在线观看av黄色 | 成人性生活视频 | 午夜av电影在线观看 | 免费av免费观看 | 超碰人人草 | 久久精品国产精品亚洲色婷婷 | 99re这里只有精品66 | 欧美资源网 | 免费av导航| 中文字幕3页 | 亚色视频在线观看 | 国产精品一级片在线观看 | 欧美精品一级片 | 销魂奶水汁系列小说 | 白嫩少妇激情无码 | 天天色综合影视 | 欧美爱爱免费视频 | h在线 | 最新91在线 | 97精品人妻一区二区三区蜜桃 | 日本黄色一级视频 | 久久精品国产网红主播 | 色婷婷亚洲一区二区三区 | 在线视频一区二区三区四区 | 久久久久久久久久久国产精品 | 99热首页| 男女做的视频 | 国产精品久久久久久69 | youjizz自拍 | 欧美人妖另类 | 欧美色图小说 | 日韩网站免费观看高清 | 超级碰在线观看 | 亚洲专区一区 | 宇都宫紫苑在线播放 | 欧美激情一区二区视频 | 99er视频 | 波多野结衣一区二区三区免费视频 | 97热视频| 久久久精品中文字幕麻豆发布 | 天天色天天操天天射 | 性网| 成人黄色在线播放 | 潘金莲一级淫片aaaaaa播放 | 久久精品国产77777蜜臀 | 亚洲激情在线观看 | 草草视频在线播放 | 91亚洲国产成人久久精品麻豆 | 婷婷五月综合缴情在线视频 | 欧美性生活网 | 欧美日韩中日 | 777久久 | 亚洲第一成年人网站 | 欧美日韩高清一区二区 国产亚洲免费看 | 四虎8848 | 日韩一区二区三区av | 亚洲成人资源 | 国产无遮挡又黄又爽又色 | 欧美一级电影在线 | 国产精品视频导航 | 日韩久久高清 | 日韩av中字 | 久久一二三四区 | 国产激情片 | 天天色成人 | 岛国av免费在线观看 | 最新黄色网址在线观看 | 精品久久久久久中文字幕 | 蜜臀99久久精品久久久久小说 | 亚洲综合情 | 国产欧美日韩在线视频 | 色哟哟网站入口 | 国产偷自拍视频 | 久草91 | 香港三级在线视频 | 精品人人人 | 色女人网 | 亚洲精品网址 | 国产精品探花一区二区三区 | 婷婷五月花 | 国产一区二区在线免费观看 |