兩個(gè)跨域頁(yè)面進(jìn)行跳轉(zhuǎn)傳參的終極方案

本文約定:
A頁(yè)面:跳轉(zhuǎn)前的原來頁(yè)面削锰,假設(shè)為http://a.com
B頁(yè)面:將要跳轉(zhuǎn)的目標(biāo)頁(yè)面,假設(shè)為http://b.com

一官还、簡(jiǎn)單方案

說到頁(yè)面跳轉(zhuǎn),首先想到的就是用a標(biāo)簽:

  // 在A頁(yè)面點(diǎn)擊鏈接,并將參數(shù)data傳到B頁(yè)面
  <a href=”http://b.com?data=1” target=”_blank” />
  // 在B頁(yè)面接收A頁(yè)面?zhèn)鬟^來的參數(shù)
  <script>
       var data = window.location.href.split("?")[1].split("=")[1];
  </script>

還可以使用window.open方法跳轉(zhuǎn)頁(yè)面:

  // A頁(yè)面
  <script>
       window.open(“http://b.com?data=1”, “_blank”);
  </script>

在B頁(yè)面獲取值同上

弊端:通過URL的方式傳參是有字符限制的剥槐,只能傳遞較少的數(shù)據(jù)

二慨灭、傳遞長(zhǎng)數(shù)據(jù)方案

想要傳遞大量數(shù)據(jù)就不能使用將數(shù)據(jù)放在URL中這種方式進(jìn)行傳遞朦乏,這里我使用了HTML5中新引入的window.postMessage方法進(jìn)行數(shù)據(jù)傳遞。

  // A頁(yè)面
  <script>
      var popup = window.open(“http://b.com”, ”_blank”);
      if(popup){
          setTimeout(function(){
              var data = {data: 1};
              popup.postMessage(JSON.stringify(data), “http://b.com”);
          },500);
      }
  </script>
  // B頁(yè)面
  <script>
      function receiveMessage(event){
          if (event.origin !== “http://a.com”) return;
          console.log(JSON.parse(event.data));    // {data: 1}
      }
      window.addEventListener(“message”, receiveMessage, false);
  </script>

如果是在A頁(yè)面中使用iframe標(biāo)簽嵌入B頁(yè)面的情況下氧骤,方法如下:

  // A頁(yè)面
  <iframe id=”myIframe” src=“http://b.com” />

  <script>
      var myIframe = document.getElementById(“myIframe”);
      if(myIframe ){
          var data = {data: 1};
          myIframe.contentWindow.postMessage(JSON.stringify(data), “http://b.com”);
      }
  </script>

B頁(yè)面同上

弊端:
1.使用postMessage發(fā)送消息時(shí)要保證B頁(yè)面已加載呻疹,由于A和B兩個(gè)頁(yè)面是跨域的,所以使用popup.onload是 無效的筹陵,只能使用setTimeout延遲發(fā)送刽锤,這種做法比較low,不能保證穩(wěn)定性朦佩。

2.使用iframe標(biāo)簽只能嵌入頁(yè)面并思,不能打開新窗口,使用window.open可以打開新窗口语稠,但是宋彼,當(dāng)B頁(yè)面剛被加載時(shí)是沒有數(shù)據(jù)傳遞的,數(shù)據(jù)是在窗口打開后才被發(fā)送仙畦,所以B頁(yè)面會(huì)有延遲

三宙暇、終極方案:iframe+postMessage+localStorage

在A頁(yè)面中使用iframe標(biāo)簽加載B頁(yè)面并隱藏,當(dāng)點(diǎn)擊跳轉(zhuǎn)時(shí)议泵,使用postMessage發(fā)送消息給B頁(yè)面占贫,在B頁(yè)面中監(jiān)聽A頁(yè)面發(fā)過來的數(shù)據(jù),然后保存到localStorage中先口,然后當(dāng)A頁(yè)面使用window.open打開B頁(yè)面時(shí)型奥,B頁(yè)面直接去localStorage中取數(shù)據(jù),這樣就完成了頁(yè)面跳轉(zhuǎn)并傳參

  // A頁(yè)面
  <span onClick=”toB();”>跳轉(zhuǎn)</span>
  <iframe id=”myIframe” src=“http://b.com” style=”display: none” />

  <script>
      function toB(){
          var myIframe = document.getElementById(“myIframe”);
          if(myIframe){
              var data = {data: 1};
              myIframe.contentWindow.postMessage(JSON.stringify(data), “http://b.com”);
              window.open(“http://b.com”, ”_blank”);
          }
      }
  </script>
  // B頁(yè)面
  <script>
      var aData = localStorage.getItem(“aPageData”);
      if(aData){
          doSomething(aData);     // 當(dāng)能獲取到數(shù)據(jù)時(shí)就說明是從A頁(yè)面跳轉(zhuǎn)過來的
          localStorage.removeItem(“aPageData”);
      }else{
          window.addEventListener(“message”, receiveMessage, false);
      }
      function receiveMessage(event){
          if (event.origin !== “http://a.com”) return;
          if(event.data){
              localStorage.setItem(“aPageData”, event.data);
          }
      }
  </script>

總結(jié):
1.iframe和postMessage都是可以跨域的碉京,而localStorage是不能跨域共享數(shù)據(jù)的
2.window.postMessage 中的window 始終是指將要跳轉(zhuǎn)的目標(biāo)頁(yè)面的window對(duì)象

結(jié)語(yǔ):跨域頁(yè)面進(jìn)行跳轉(zhuǎn)傳參不僅僅只有本文中提到的這幾種方案厢汹,這里就不做過多介紹了,文中有許多細(xì)節(jié)代碼沒有寫出谐宙,有哪里不對(duì)的地方烫葬,歡迎大家指正,最后感謝大家的支持。

更多個(gè)人文章

  1. 深入理解Event Loop的運(yùn)行機(jī)制
  2. 徹底搞懂盒子模型
  3. 全網(wǎng)最全Autoit3基礎(chǔ)教程及實(shí)戰(zhàn)案例
  4. 面試秘籍之手寫系列
  5. 十分鐘帶你入門Chrome插件開發(fā)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末搭综,一起剝皮案震驚了整個(gè)濱河市垢箕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兑巾,老刑警劉巖条获,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蒋歌,居然都是意外死亡帅掘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門堂油,熙熙樓的掌柜王于貴愁眉苦臉地迎上來修档,“玉大人,你說我怎么就攤上這事府框≈ㄎ眩” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵寓免,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我计维,道長(zhǎng)袜香,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任鲫惶,我火速辦了婚禮蜈首,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘欠母。我一直安慰自己欢策,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布赏淌。 她就那樣靜靜地躺著踩寇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪六水。 梳的紋絲不亂的頭發(fā)上俺孙,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音掷贾,去河邊找鬼睛榄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛想帅,可吹牛的內(nèi)容都是我干的场靴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼旨剥!你這毒婦竟也來了咧欣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤泞边,失蹤者是張志新(化名)和其女友劉穎该押,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阵谚,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚕礼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梢什。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奠蹬。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嗡午,靈堂內(nèi)的尸體忽然破棺而出囤躁,到底是詐尸還是另有隱情,我是刑警寧澤荔睹,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布狸演,位于F島的核電站,受9級(jí)特大地震影響僻他,放射性物質(zhì)發(fā)生泄漏宵距。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一吨拗、第九天 我趴在偏房一處隱蔽的房頂上張望满哪。 院中可真熱鬧,春花似錦劝篷、人聲如沸哨鸭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)像鸡。三九已至,卻和暖如春哈恰,著一層夾襖步出監(jiān)牢的瞬間坟桅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工蕊蝗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仅乓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓蓬戚,卻偏偏與公主長(zhǎng)得像夸楣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

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

  • 1. 什么是跨域豫喧? 跨域一詞從字面意思看石洗,就是跨域名嘛,但實(shí)際上跨域的范圍絕對(duì)不止那么狹隘紧显。具體概念如下:只要協(xié)議...
    w_zhuan閱讀 518評(píng)論 0 0
  • 1. 什么是跨域讲衫? 跨域一詞從字面意思看,就是跨域名嘛孵班,但實(shí)際上跨域的范圍絕對(duì)不止那么狹隘涉兽。具體概念如下:只要協(xié)議...
    他在發(fā)呆閱讀 822評(píng)論 0 0
  • 元素會(huì)創(chuàng)建包含另外一個(gè)文檔的內(nèi)聯(lián)框架(即行內(nèi)框架); 一篙程、align 屬性(不贊成) align屬性規(guī)定ifram...
    puxiaotaoc閱讀 19,731評(píng)論 0 14
  • 來吧枷畏,少年,今天還能看文章學(xué)習(xí)的虱饿,一多半都是單身貴族拥诡,看朋友圈還會(huì)被虐,不如學(xué)習(xí)氮发,上街還會(huì)被虐渴肉,不如學(xué)習(xí),痛并快樂...
    范小飯_閱讀 7,950評(píng)論 3 24
  • 作者:無雙爽冕,鏈接:www.cnblogs.com/2050/p/3191744.html 這里說的js跨域是指通過...
    開車去環(huán)游世界閱讀 502評(píng)論 0 9