教程-如何優(yōu)雅的使用iframe

先來一個官方文檔:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe

iframe在web應(yīng)用刀耕火種的開發(fā)年代是非常常見的瘪板,現(xiàn)在基于Node構(gòu)建的前端應(yīng)用嵌入iframe的場景越來越少了因惭,但是在大型的web應(yīng)用中也會經(jīng)常遇見利用iframe嵌入多個前端應(yīng)用于一套前端系統(tǒng)中链沼,方便用戶在一個系統(tǒng)中去進(jìn)行業(yè)務(wù)操作灭将,而不需要在幾個不同的系統(tǒng)中來回切換软棺,好了應(yīng)用場景說了這么多,正式開始吧肠缔。

iframe可以理解為一個DOM里面插入了一個窗口級應(yīng)用忿项,iframe有自己獨立的window,iframe窗口自己內(nèi)部的邏輯操作可以獨立长豁,當(dāng)然在同域條件下钧唐,iframe窗口可以訪問父級窗口,父級窗口也可以訪問iframe窗口匠襟,跨域情況下只能通過Window.postMessage()通信的方式告訴對方自己想要的操作钝侠。

使用iframe只要能拿到父級給的參數(shù)该园,iframe內(nèi)部就可以進(jìn)行一系列操作,登錄帅韧,鑒權(quán)等里初。那怎么獲取到父級的參數(shù)就需要思考了。

大致以下幾種:

1.通過iframe的URL參數(shù)攜帶參數(shù)信息忽舟。

此方法比較簡單方便双妨,也是比較常見的方法,主系統(tǒng)也不用做額外的開發(fā)萧诫,只需要在訪問的時候斥难,動態(tài)切換URL路徑就行枝嘶,此方法不管同域跨域都可以使用帘饶。

2.同域情況下,父子級直接相互操作即可群扶,調(diào)用相應(yīng)的方法即可及刻。

  • 調(diào)用函數(shù):
  1. 父級頁面調(diào)用子頁面的函數(shù) name.window.func(),name為iframe的name
  2. 子頁面調(diào)用父級頁面的函數(shù) parent.window.func();
  • 訪問頁面元素

name.window

parent.window

window都能拿到竞阐,dom缴饭,localstorage,session等還拿不到嗎骆莹?

  • 注意

保證iframe已經(jīng)加載成功

3.跨域情況下就用Window.postMessage()颗搂,此方法一樣要保證iframe加載成功

直接給個例子

父窗口發(fā)消息

setIframe(){
    let data = 'test' // data盡量字符串,存在兼容性問題幕垦,若要傳對象丢氢,將對象轉(zhuǎn)化為字符串再傳遞
    let hcfIframe:any = document.getElementById('hcfIframe')
    // iframe加載需要時間,遞歸發(fā)送消息
    if(hcfIframe){
      // contentWindow屬性返回<iframe>元素的Window對象先改。你可以使用這個Window對象來訪問iframe的文檔及其內(nèi)部DOM疚察。contentWindow為只讀,但是可以像操作全局Window對象一樣操作其屬性仇奶。
      hcfIframe.contentWindow.postMessage(data,'http://localhost:8001/#/');
      return
    }else{
      setTimeout(() => {
        this.setIframe()
      },200)
    }
 }

iframe窗口接收消息

//回調(diào)函數(shù)
function receiveMessageFromIframePage (event) {
    console.log('receiveMessageFromIframePage', event)
}

//監(jiān)聽message事件
window.addEventListener("message", receiveMessageFromIframePage, false);

接收消息后你就可以進(jìn)行相應(yīng)的操作了貌嫡。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市该溯,隨后出現(xiàn)的幾起案子岛抄,更是在濱河造成了極大的恐慌,老刑警劉巖狈茉,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夫椭,死亡現(xiàn)場離奇詭異,居然都是意外死亡论皆,警方通過查閱死者的電腦和手機(jī)益楼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門猾漫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人感凤,你說我怎么就攤上這事悯周。” “怎么了陪竿?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵禽翼,是天一觀的道長。 經(jīng)常有香客問我族跛,道長闰挡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任礁哄,我火速辦了婚禮长酗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桐绒。我一直安慰自己夺脾,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布茉继。 她就那樣靜靜地躺著咧叭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烁竭。 梳的紋絲不亂的頭發(fā)上菲茬,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音派撕,去河邊找鬼婉弹。 笑死,一個胖子當(dāng)著我的面吹牛腥刹,可吹牛的內(nèi)容都是我干的马胧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼衔峰,長吁一口氣:“原來是場噩夢啊……” “哼佩脊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起垫卤,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤威彰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后穴肘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歇盼,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年评抚,在試婚紗的時候發(fā)現(xiàn)自己被綠了豹缀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伯复。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖邢笙,靈堂內(nèi)的尸體忽然破棺而出啸如,到底是詐尸還是另有隱情,我是刑警寧澤氮惯,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布叮雳,位于F島的核電站,受9級特大地震影響妇汗,放射性物質(zhì)發(fā)生泄漏帘不。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一杨箭、第九天 我趴在偏房一處隱蔽的房頂上張望寞焙。 院中可真熱鬧,春花似錦告唆、人聲如沸棺弊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至稻艰,卻和暖如春懂牧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尊勿。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工僧凤, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人元扔。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓躯保,卻偏偏與公主長得像,于是被迫代替她去往敵國和親澎语。 傳聞我的和親對象是個殘疾皇子途事,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 元素會創(chuàng)建包含另外一個文檔的內(nèi)聯(lián)框架(即行內(nèi)框架); 一擅羞、align 屬性(不贊成) align屬性規(guī)定ifram...
    puxiaotaoc閱讀 19,727評論 0 14
  • 概述 JavaScript出于安全方面的考慮尸变,不允許跨域調(diào)用其他頁面的對象。但在安全限制的同時也給注入iframe...
    npmstart閱讀 2,155評論 0 5
  • 來吧减俏,少年召烂,今天還能看文章學(xué)習(xí)的,一多半都是單身貴族娃承,看朋友圈還會被虐奏夫,不如學(xué)習(xí)怕篷,上街還會被虐,不如學(xué)習(xí)酗昼,痛并快樂...
    范小飯_閱讀 7,940評論 3 24
  • 1. 什么是跨域匙头? 跨域一詞從字面意思看,就是跨域名嘛仔雷,但實際上跨域的范圍絕對不止那么狹隘蹂析。具體概念如下:只要協(xié)議...
    w_zhuan閱讀 515評論 0 0
  • 你可能不知道 GOOGLE 最近的「小動作」 了解我的人知道,我是一名不折不扣的 G 粉碟婆,一直在關(guān)注 Google...
    PixelTogether閱讀 290評論 0 0