亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

跨域傳值即主頁面與iframe之間互相傳值

2019-11-20 21:30:07
字體:
來源:轉載
供稿:網友
需求一:主頁面A 怎么向 iframe B 傳遞數據呢?

這種方式,是主頁面需要給 iframe B 傳遞數據,然后 iframe B 獲得到數據后進行特定的處理

實現方式

實現的技巧就是利用 location 對象的 hash 值,通過它傳遞通信數據,我們只需要在主頁面A中設置 iframe B 的 src 后面多加個 #data 字符串(data就是你要傳遞的數據),如下圖所示:

然后在 iframe B 中通過某種方式能即時的獲取到這兒 data 就可以了,其實常用的一種方式就是:

1. 在 iframe B 中通過 setInterval 方法設置定時器, 監聽 location.href 的變化即可獲得上面的 data 信息
2. 然后 iframe B 就能根據這個 data 信息進行相應的邏輯處理

需求二:iframe B 怎么向 主頁面A 傳遞數據呢?

這種方式,是 iframe B 需要給主頁面傳遞數據,然后主頁面根據獲得到數據后進行特定的處理

實現方式

實現的技巧就是利用一個代理 IframeC,它嵌入到 iframe B 中,并且和主頁面A必須保持是同域,然后我們通過它充分利用上面第一種通信方式的實現原理就能把 iframe B 的數據傳遞給 iframeC,接下來的問題就是怎么讓iframeC把數據傳遞給主頁面A ,如下圖所示:

因為,iframeC 和主頁面是同域的,所以它們之間傳遞數據就變得簡單多了,我們這里的方式就是使用一個經常使用的屬性 window.top (也可以使用window.parent.parent),它返回對載入瀏覽器得最頂層 window 對象的引用,這樣我們就能直接條用主頁面A中方法啦,哈哈哈,簡單吧。
到此,我們做個簡單分析總結

這種實現方式的前提也是最大的缺點就是 iframe 中的內容必須是我們可控的,但是至少我們這種實現方式是建立在瀏覽器的安全規則之上的,沒有破壞應用本身的安全性。
實現時需要考慮的一些細節

盡量考慮到了易用,可擴展性和可維護性,比如:

讓第三方 App 只需加載一個我們提供的JS種子文件就能很方便的使用我們為其提供的各種工具
上面的各種工具,我們采用包的形式進行組織,最大化的實現按需加載
第一條中的JS種子文件只提供基礎的方法實現,并且把最常用的工具包放在里面,比如高度自適應
通過種子文件,我們還提供給第三方 App 一些常用的JS工具包,而且直接使用的類似YUI3模塊的動態加載機制就可使用指定的工具包
對第三方 App 和 主頁面傳遞的數據進行分類(自我調用,登錄驗證,傳遞數據等等)
傳遞的數據使用滿足特定規范的JSON格式,并通過統一的服務出口發出去,主頁面提供一個統一服務接口解析數據,并根據規范調用相應的方法
還有,就是版本控制的問題,為了盡量減少給第三方App帶來影響,以上所有這些JS文件的版本都是采用向后兼容的策略,小版本使用服務器設置SQUID緩存特定頻率的失效時間實現,大版本更新根據用戶自己的需求手動更改
當然,以上可能不是最優的解決方案,只是希望能給你一些幫助和引導,我們也在逐步的改進我們的一些實現方式,比如版本控制這塊兒,我們也有一些問題需要解決

具體的代碼

主頁面A的源碼
復制代碼 代碼如下:

Js代碼
/*主頁面A*/
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>主頁面A</title>
<script type="text/javascript">
function init(){
document.domain = 'bai.sohu.com';
alert('我是主框架,嵌入了第三方應用IframeB,下面開始加載應用');
var iframeTag = document.getElementById('frameB'),
iframeSrc = 'http://test.com/iframePage.html';

iframeTag.src = iframeSrc;
iframeTag.style.display = 'block';
};

function callback(h){
var iframeB = document.getElementById('frameB');
alert('IframeC調用我(主框架)接口,把IframeB的高度傳給我,具體值是:' + h);
iframeB.style.height= h + 10 + 'px';
iframeB.src += '#'+ h
};
</script>
</head>
<body onload="init();">
<p>我是主頁框架,我的域是:bai.sohu.com</p>
<iframe id="frameB" style="display:none;"></iframe>
</body>
</html>

iframeB(iframePage.html)的源碼
復制代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>iframeB</title>
</head>
<body onload="init();">
<p style="height:500px;">我是三方應用,我的域是:test.com</p>
<iframe id="frameC" style="height:1px;width:1px;display:none;"></iframe>
</body>
</html>
<script type="text/javascript">
function init(){
alert('我是第三方App,下面開始創建和主框架同域的通信通道IframeC,并設置它的src,用#號傳遞高度值');

var iframeTag = document.getElementById('frameC'),
iframeSrc = 'http://bai.sohu.com/iframePageC.html#',
pageHeight = document.documentElement.scrollHeight || document.body.scrollHeight;

iframeTag.src = iframeSrc + pageHeight;
iframeTag.style.display = 'block';

window.setTimeout(function(){
alert('主頁面設置我(IframeB)的src,通過Hash(#)給我傳遞它收到的高度:' + location.hash);
},2000);
};
</script>

iframeC(iframePageC.html)的源碼
復制代碼 代碼如下:

<script type="text/javascript">
document.domain = 'bai.sohu.com';
alert('我(IframeC)收到iframeB通過參數(#)給我傳遞高度值,我現在調用主頁面方法去設置IframeB的高度');
top.callback(window.location.href.split('#')[1]);
</script>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久噜噜噜久久久精品| 亚洲精品456在线播放狼人| 欧美黑人视频一区| 美女国内精品自产拍在线播放| 91po在线观看91精品国产性色| 欧美综合一区第一页| 亚洲影院色无极综合| 日韩免费观看网站| 欧美一级在线亚洲天堂| 亚洲一级黄色av| 国产在线视频欧美| 亚洲国产天堂久久综合| 国产伊人精品在线| 日本中文字幕久久看| 国产精品午夜视频| 亚洲国产97在线精品一区| 亚洲精品欧美日韩| 亚洲一区中文字幕在线观看| 国产精品影片在线观看| 日韩国产欧美精品一区二区三区| 97久久久久久| 51精品在线观看| 亚洲女人被黑人巨大进入al| 久久久av电影| 亚洲成人国产精品| 国产91在线视频| 日韩av资源在线播放| 亚洲乱码av中文一区二区| 午夜精品久久久久久久99黑人| 国产精品视频免费观看www| 国产丝袜精品视频| 亚洲片国产一区一级在线观看| 91久久国产综合久久91精品网站| 久久免费福利视频| 久久久久久久久中文字幕| 国产在线98福利播放视频| 日韩视频在线一区| 欧美三级xxx| 日产日韩在线亚洲欧美| 国产一区二区美女视频| 亚洲色图美腿丝袜| 欧美电影院免费观看| 91精品久久久久久久久久久久久久| 国产精品7m视频| 日韩高清av一区二区三区| 久久久97精品| 亚洲第一色中文字幕| 国产精品国模在线| 国产v综合ⅴ日韩v欧美大片| 久久久久久久影视| 最近2019年中文视频免费在线观看| 久久色精品视频| 国产在线一区二区三区| 日韩av三级在线观看| 一区二区国产精品视频| 日韩中文字幕国产精品| 国产精品1234| 国产精品久久久久久久电影| 国产精品第三页| 亚洲人成免费电影| 国产精品久久久久久久久久久不卡| 26uuu另类亚洲欧美日本老年| 亚洲一区二区黄| 97在线免费视频| 97久久精品人搡人人玩| 亚洲自拍偷拍在线| 国产精品成人国产乱一区| 亚洲欧美自拍一区| 激情懂色av一区av二区av| 色哟哟亚洲精品一区二区| 亚洲精品成a人在线观看| 亚洲成色www8888| 久久久影视精品| 亚洲热线99精品视频| 日本一区二区三区四区视频| 国产精品福利无圣光在线一区| 欧美激情视频给我| 中文字幕在线观看日韩| 另类色图亚洲色图| 精品无人区乱码1区2区3区在线| 久久av红桃一区二区小说| 亚洲一级一级97网| 亚洲va电影大全| 日韩不卡中文字幕| 久久久久久久久综合| 亚洲黄色在线观看| 久久久久久999| 国产极品精品在线观看| 中文精品99久久国产香蕉| 51视频国产精品一区二区| 国产精品99久久久久久久久久久久| 欧美日韩国产精品| 少妇高潮久久久久久潘金莲| xxav国产精品美女主播| 中文字幕日韩av电影| 欧美不卡视频一区发布| 色噜噜国产精品视频一区二区| 亚洲免费中文字幕| 91在线免费网站| 日日骚av一区| 91视频88av| 欧美在线www| 欧美激情一级欧美精品| 中文字幕精品影院| 欧美日韩国产黄| 欧美一区二粉嫩精品国产一线天| 日韩精品在线免费播放| 国产精品第一页在线| 亚洲网站视频福利| 成人久久18免费网站图片| 日韩欧美在线视频日韩欧美在线视频| 午夜免费久久久久| 国产精品免费一区| 97激碰免费视频| 日韩视频在线一区| 国产日韩欧美在线视频观看| 欧美日韩在线观看视频小说| 欧美激情精品久久久久久蜜臀| 亚洲aⅴ男人的天堂在线观看| 日韩中文字幕视频| 亚洲第一福利网| 欧美激情一区二区三区高清视频| 成人久久精品视频| 欧洲美女7788成人免费视频| 亚洲欧美日韩高清| 日韩av有码在线| 精品动漫一区二区| 欧美电影在线观看网站| 久久精品国产亚洲精品| 精品国产美女在线| 91国产视频在线| 在线精品高清中文字幕| 亚洲国产精品女人久久久| 欧美成aaa人片在线观看蜜臀| 中文字幕精品一区二区精品| 亚洲精品一区二区久| 久久精彩免费视频| 欧美激情综合色综合啪啪五月| 高清欧美性猛交xxxx黑人猛交| 日韩有码在线视频| 高跟丝袜一区二区三区| 午夜剧场成人观在线视频免费观看| 成人有码在线视频| 欧美裸身视频免费观看| 欧美日韩国产中文精品字幕自在自线| 国产一区二区动漫| 国产一区二区三区毛片| 久久国产精品久久久| 日本一区二区不卡| 亚洲国产成人久久综合| 成人黄色片网站| 夜夜狂射影院欧美极品| 欧美电影免费看| 欧美日韩免费区域视频在线观看| 亚洲成在人线av| 九九精品视频在线| 日韩精品高清在线| 欧美精品第一页在线播放| 91超碰caoporn97人人| 成人h猎奇视频网站| 成人激情视频在线观看| 欧美又大又粗又长| 国产亚洲精品久久久久久牛牛| 蜜臀久久99精品久久久久久宅男|