iframe跨域通信封裝詳解
iframe跨域通信
眾所周知,由于前端javascript對(duì)跨域訪問(wèn)做了安全限制,javascript只能訪問(wèn)與包含它的文檔在同一域下的內(nèi)容。
用法舉例:
需求是在http://www.demo.org/top.html中通過(guò)iframe方式嵌入http://www.iframe.com/iframe.html,而在iframe頁(yè)面中希望通過(guò)點(diǎn)擊一個(gè)按鈕,調(diào)用top頁(yè)面的一個(gè)js方法。
1. 在top頁(yè)面中建立方法供內(nèi)部頁(yè)面使用
function testFun (text) {
alert(text);
}
2. 在http://www.demo.org/top.html中嵌入iframe
<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è)面中通過(guò)js配置代理頁(yè)面地址
TopProxyConfig = {url:'http://www.demo.org/proxy.html'};
6. 通過(guò)kissy加載通信模塊
KISSY.use('topproxy', function(S, TopProxy){
//執(zhí)行代碼
});
7. 在http://www.iframe.com/iframe.html通過(guò)TopProxy.call直接訪問(wèn)http://www.demo.org/top.html中的方法,如
KISSY.use('topproxy', function(S, TopProxy){
TopProxy.call('testFun', '這是一個(gè)真實(shí)的故事');
});
其中call方法的第一個(gè)參數(shù)是外部網(wǎng)頁(yè)的全局方法名,支持“.”,后面參數(shù)無(wú)限個(gè),均傳到目標(biāo)方法里去。
注:
1. 調(diào)用后可能不會(huì)立即執(zhí)行,會(huì)等到iframe加載完畢后才觸發(fā),如果想預(yù)加載可以提前執(zhí)行一個(gè)沒(méi)用的方法。
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可以通過(guò)window.top訪問(wèn)到A的window。那么在B中可以改變C的href的hash向C傳遞一些信息,然后C再把這些信息傳遞給A,從而間接達(dá)到B給A傳遞信息的目的
相關(guān)文章
使用jQuery實(shí)現(xiàn)WordPress中的Ctrl+Enter和@評(píng)論回復(fù)
相信大家對(duì)QQ中的Ctrl+Enter快捷回復(fù)和微博上的@指名回復(fù)功能都不陌生,在WordPress的評(píng)論欄方面我們同樣可以添加這樣的功能,一起來(lái)看使用jQuery實(shí)現(xiàn)WordPress中的Ctrl+Enter和@評(píng)論回復(fù)的方法:2016-05-05
jQuery實(shí)現(xiàn)簡(jiǎn)單滾動(dòng)動(dòng)畫效果
這篇文章主要為大家詳細(xì)介紹了jQuery實(shí)現(xiàn)簡(jiǎn)單滾動(dòng)動(dòng)畫效果的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-04-04
checkbox批量選中,獲取選中項(xiàng)的值的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇checkbox批量選中,獲取選中項(xiàng)的值的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
jquery實(shí)現(xiàn)簡(jiǎn)單實(shí)用的輪播器
這篇文章主要為大家詳細(xì)介紹了jquery實(shí)現(xiàn)簡(jiǎn)單實(shí)用的輪播器制作方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
jquery實(shí)現(xiàn)手機(jī)端單店鋪購(gòu)物車結(jié)算刪除功能
本文主要介紹了js實(shí)現(xiàn)手機(jī)端單店鋪購(gòu)物車結(jié)算刪除功能的示例代碼,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02
jQuery EasyUI 菜單與按鈕之創(chuàng)建簡(jiǎn)單的菜單和鏈接按鈕
這篇文章主要介紹了jQuery EasyUI 菜單與按鈕之創(chuàng)建簡(jiǎn)單的菜單和鏈接按鈕,需要的朋友可以參考下2015-11-11

