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

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

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

需求一:主頁面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 需要給主頁面?zhèn)鬟f數據,然后主頁面根據獲得到數據后進行特定的處理

實現方式

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

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

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

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

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

具體的代碼

主頁面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,下面開始創(chuàng)建和主框架同域的通信通道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>

相關文章

  • JS寫谷歌瀏覽器chrome的外掛實例

    JS寫谷歌瀏覽器chrome的外掛實例

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

    利用Javascript判斷操作系統的類型實現不同操作系統下的兼容性

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

    JS中箭頭函數與this的寫法和理解

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

    基于JS實現父組件的請求服務過程解析

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

    js獲取網頁高度(詳細整理)

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

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

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

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

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

    淺談javascript中自定義模版

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

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

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

    枚舉的實現求得1-1000所有出現1的數字并計算出現1的個數

    求得1-1000所有出現1的數字,并計算出現1的個數,以下是采用枚舉的實現方法,但是若從1-N就不管用了,因為N不一定會是多少
    2013-09-09

最新評論

长春市| 扎兰屯市| 扎囊县| 邯郸市| 沿河| 综艺| 湘乡市| 固镇县| 平凉市| 双峰县| 射阳县| 福建省| 湘西| 凭祥市| 临邑县| 嘉义市| 宁国市| 全州县| 台东市| 中西区| 开封县| 武隆县| 天祝| 博客| 光泽县| 吴川市| 平南县| 凤阳县| 台州市| 上犹县| 大庆市| 托克逊县| 当雄县| 巧家县| 卓尼县| 禄劝| 内乡县| 尖扎县| 嫩江县| 镇巴县| 华安县|