国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

iframe跨域通信封裝詳解

2019-11-20 11:51:29
字體:
供稿:網(wǎng)友

iframe跨域通信

查看演示        源碼下載

眾所周知,由于前端javascript對(duì)跨域訪問做了安全限制,javascript只能訪問與包含它的文檔在同一域下的內(nèi)容。

用法舉例:

需求是在http://www.demo.org/top.html中通過iframe方式嵌入http://www.iframe.com/iframe.html,而在iframe頁(yè)面中希望通過點(diǎn)擊一個(gè)按鈕,調(diào)用top頁(yè)面的一個(gè)js方法。

1. 在top頁(yè)面中建立方法供內(nèi)部頁(yè)面使用

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

function testFun (text) {
 alert(text);
}

2. 在http://www.demo.org/top.html中嵌入iframe

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

<iframe width="320" height="240" src="http://www.iframe.com/iframe.html"></iframe>

3. 建立www.demo.org域下建立一個(gè)代理頁(yè)面http://www.demo.org/proxy.html用于跨域通信使用

4. 在http://www.demo.org/proxy.html加入用于代理頁(yè)面的邏輯

5. 在http://www.iframe.com/iframe.html頁(yè)面中通過js配置代理頁(yè)面地址

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

TopProxyConfig = {url:'http://www.demo.org/proxy.html'};

6. 通過kissy加載通信模塊

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

KISSY.use('topproxy', function(S, TopProxy){
//執(zhí)行代碼
});

7. 在http://www.iframe.com/iframe.html通過TopProxy.call直接訪問http://www.demo.org/top.html中的方法,如

KISSY.use('topproxy', function(S, TopProxy){ TopProxy.call('testFun', '這是一個(gè)真實(shí)的故事');});

其中call方法的第一個(gè)參數(shù)是外部網(wǎng)頁(yè)的全局方法名,支持“.”,后面參數(shù)無限個(gè),均傳到目標(biāo)方法里去。

注:

1. 調(diào)用后可能不會(huì)立即執(zhí)行,會(huì)等到iframe加載完畢后才觸發(fā),如果想預(yù)加載可以提前執(zhí)行一個(gè)沒用的方法。
2. 如果不設(shè)置TopProxyConfig,那么會(huì)認(rèn)為引用iframe和父iframe同域(大域)并直接調(diào)用top對(duì)象。
3. 在IE678下可能直接調(diào)用top中的系統(tǒng)方法會(huì)報(bào)錯(cuò),由于系統(tǒng)方法不支持apply。

原理:

A頁(yè)面嵌日的iframe頁(yè)面B,其中B想調(diào)用A的方法并傳遞數(shù)據(jù),那么可在B中嵌入A頁(yè)面同域下的一個(gè)iframe頁(yè)面C,C可以通過window.top訪問到A的window。那么在B中可以改變C的href的hash向C傳遞一些信息,然后C再把這些信息傳遞給A,從而間接達(dá)到B給A傳遞信息的目的

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 格尔木市| 简阳市| 吐鲁番市| 龙南县| 夏邑县| 辽中县| 宜兰市| 偃师市| 光泽县| 凌云县| 九台市| 邵阳县| 措美县| 清水县| 崇左市| 彭州市| 金坛市| 彭水| 黄陵县| 阜阳市| 宜丰县| 河津市| 昌吉市| 濉溪县| 云浮市| 施秉县| 新晃| 高台县| 江城| 南丰县| 东乡族自治县| 衡南县| 竹山县| 江油市| 溆浦县| 师宗县| 乡宁县| 晋江市| 闽侯县| 盖州市| 虹口区|