最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2013年12月09日 16:51:55   投稿:whsnow  
主頁面A 怎么向 iframe B 傳遞數(shù)據(jù)呢?iframe B 怎么向 主頁面A 傳遞數(shù)據(jù),下面有不錯(cuò)的實(shí)現(xiàn)思路,感興趣的朋友可以了解下

需求一:主頁面A 怎么向 iframe B 傳遞數(shù)據(jù)呢?

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

實(shí)現(xiàn)方式

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

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

1. 在 iframe B 中通過 setInterval 方法設(shè)置定時(shí)器,location.href 的變化即可獲得上面的 data 信息
2. 然后 iframe B 就能根據(jù)這個(gè) data 信息進(jìn)行相應(yīng)的邏輯處理

需求二:iframe B 怎么向 主頁面A 傳遞數(shù)據(jù)呢?

這種方式,是 iframe B 需要給主頁面?zhèn)鬟f數(shù)據(jù),然后主頁面根據(jù)獲得到數(shù)據(jù)后進(jìn)行特定的處理

實(shí)現(xiàn)方式

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

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

這種實(shí)現(xiàn)方式的前提也是最大的缺點(diǎn)就是 iframe 中的內(nèi)容必須是我們可控的,但是至少我們這種實(shí)現(xiàn)方式是建立在瀏覽器的安全規(guī)則之上的,沒有應(yīng)用本身的安全性。
實(shí)現(xiàn)時(shí)需要考慮的一些細(xì)節(jié)

盡量考慮到了易用,可擴(kuò)展性和可維護(hù)性,比如:

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

具體的代碼

主頁面A的源碼

復(fù)制代碼 代碼如下:

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('我是主框架,嵌入了第三方應(yīng)用IframeB,下面開始加載應(yīng)用');
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調(diào)用我(主框架)接口,把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)的源碼
復(fù)制代碼 代碼如下:

<!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;">我是三方應(yīng)用,我的域是:test.com</p>
<iframe id="frameC" style="height:1px;width:1px;display:none;"></iframe>
</body>
</html>
<script type="text/javascript">
function init(){
alert('我是第三方App,下面開始創(chuàng)建和主框架同域的通信通道IframeC,并設(shè)置它的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('主頁面設(shè)置我(IframeB)的src,通過Hash(#)給我傳遞它收到的高度:' + location.hash);
},2000);
};
</script>

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

<script type="text/javascript">
document.domain = 'bai.sohu.com';
alert('我(IframeC)收到iframeB通過參數(shù)(#)給我傳遞高度值,我現(xiàn)在調(diào)用主頁面方法去設(shè)置IframeB的高度');
top.callback(window.location.href.split('#')[1]);
</script>

相關(guān)文章

  • JS寫谷歌瀏覽器chrome的外掛實(shí)例

    JS寫谷歌瀏覽器chrome的外掛實(shí)例

    本篇文章主要給大家講解了一個(gè)用JS寫出的谷歌瀏覽器的怪掛實(shí)例,以及給大家分享了其中的代碼,有興趣的朋友學(xué)些下。
    2018-01-01
  • 利用Javascript判斷操作系統(tǒng)的類型實(shí)現(xiàn)不同操作系統(tǒng)下的兼容性

    利用Javascript判斷操作系統(tǒng)的類型實(shí)現(xiàn)不同操作系統(tǒng)下的兼容性

    在通過Javascript實(shí)現(xiàn)客戶端和服務(wù)端的交互時(shí),有時(shí)候需要對操作系統(tǒng)進(jìn)行判斷,以便實(shí)現(xiàn)不同操作系統(tǒng)下的兼容性;從而實(shí)現(xiàn)網(wǎng)站在跨平臺瀏覽時(shí)候保持良好的用戶體驗(yàn),感興趣的朋友可以了解下啊,或許對你有所幫助
    2013-01-01
  • JS中箭頭函數(shù)與this的寫法和理解

    JS中箭頭函數(shù)與this的寫法和理解

    這篇文章主要給大家介紹了關(guān)于JS中箭頭函數(shù)與this的寫法和理解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 基于JS實(shí)現(xiàn)父組件的請求服務(wù)過程解析

    基于JS實(shí)現(xiàn)父組件的請求服務(wù)過程解析

    這篇文章主要介紹了基于JS實(shí)現(xiàn)父組件的請求服務(wù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • js獲取網(wǎng)頁高度(詳細(xì)整理)

    js獲取網(wǎng)頁高度(詳細(xì)整理)

    js獲取網(wǎng)頁高度包括(網(wǎng)頁可見區(qū)域高,屏幕分辨率的高,屏幕可用工作區(qū)高度,js 獲取瀏覽器高度 js 獲取屏幕高度)等等,各種高度,本文詳細(xì)整理了一些,需要了解的朋友可以參考下
    2012-12-12
  • 深入理解webpack process.env.NODE_ENV配置

    深入理解webpack process.env.NODE_ENV配置

    這篇文章主要介紹了深入理解webpack process.env.NODE_ENV配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • js中indexOf()的簡單使用示例

    js中indexOf()的簡單使用示例

    indexOf在js中有著重要的作用,可以判斷一個(gè)元素是否在數(shù)組中存在,或者判斷一個(gè)字符是否在字符串中存在,下面這篇文章主要給大家介紹了關(guān)于js中indexOf()簡單使用的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 淺談javascript中自定義模版

    淺談javascript中自定義模版

    本文向我們簡單介紹了javascript中自定義模板的2種方法,圖文并茂,十分詳細(xì),這里推薦給小伙伴們。
    2015-01-01
  • 瀏覽器兼容console對象的簡要解決方案分享

    瀏覽器兼容console對象的簡要解決方案分享

    不同瀏覽器或者版本之間對于console對象的支持不盡相同,而console方法在開發(fā)調(diào)試過程中都是不錯(cuò)的工具。難道要在上線前把所有console.xxxx去掉以保證某些瀏覽器不報(bào)錯(cuò)么。其實(shí)可以變通解決
    2013-10-10
  • 枚舉的實(shí)現(xiàn)求得1-1000所有出現(xiàn)1的數(shù)字并計(jì)算出現(xiàn)1的個(gè)數(shù)

    枚舉的實(shí)現(xiàn)求得1-1000所有出現(xiàn)1的數(shù)字并計(jì)算出現(xiàn)1的個(gè)數(shù)

    求得1-1000所有出現(xiàn)1的數(shù)字,并計(jì)算出現(xiàn)1的個(gè)數(shù),以下是采用枚舉的實(shí)現(xiàn)方法,但是若從1-N就不管用了,因?yàn)镹不一定會(huì)是多少
    2013-09-09

最新評論

隆化县| 海阳市| 柞水县| 信阳市| 新源县| 四子王旗| 洪湖市| 夏河县| 天镇县| 财经| 吴桥县| 栾城县| 花莲市| 涡阳县| 平顺县| 榕江县| 浏阳市| 侯马市| 沙坪坝区| 班戈县| 金乡县| 东港市| 定西市| 高阳县| 安化县| 天津市| 卢氏县| 迭部县| 石家庄市| 澄迈县| 克山县| 祁门县| 郓城县| 乡宁县| 武隆县| 宁德市| 漾濞| 泗洪县| 桐梓县| 泸定县| 太保市|