jQuery实现跨域iframe接口方法调用
jQuery实现跨域iframe接口方法调用
发布时间:2016-12-30 来源:查字典编辑
摘要:cross.js复制代码代码如下:(function(global){global.Cross={signalHandler:{},on:f...

cross.js

复制代码 代码如下:

(function(global){

global.Cross = {

signalHandler: {},

on: function(signal, func){

this.signalHandler[signal] = func;

},

call: function(win, domain, signal, data, callbackfunc){

var notice = {"signal": signal, "data": data};

if(!!callbackfunc){

notice["callback"] = "callback_" + new Date().getTime();

Cross.on(notice["callback"], callbackfunc);

}

var noticeStr = JSON.stringify(notice);

win.postMessage(noticeStr, domain);

}

};

$(window).on("message", function(e) {

var realEvent = e.originalEvent,

data = realEvent.data,

swin = realEvent.source,

origin = realEvent.origin,

protocol;

try {

protocol = JSON.parse(data);

var result = global.Cross.signalHandler[protocol.signal].call(null, protocol.data);

if(!!protocol["callback"]){

Cross.call(swin, origin, protocol["callback"], {result: result});

}

if(/^callback_/.test(protocol.signal)){

delete Cross.signalHandler[protocol.signal];

}

} catch (e) {

console.log(e);

throw new Error("cross error.");

}

});

})(window);

a.html

复制代码 代码如下:

<!doctype HTML>

<html>

<head>

<script src="jquery-1.8.3.min.js"></script>

<script src="cross.js"></script>

<script>

function call_b(){

var ifw = $("#ifr")[0].contentWindow;

//调用iframe子页面的公开的test接口, 子页面域名为http://localhost:8088

Cross.call(ifw,"http://localhost:8088","test",{t: $("#txt").val()});

}

</script>

</head>

<body>

<input id="txt" type="text"/>

<button>call</button>

<iframe id="ifr" src="http://localhost:8088/b.html"></iframe>

</body>

</html>

b.html

复制代码 代码如下:

<!doctype HTML>

<html>

<head>

<script src="jquery-1.8.3.min.js"></script>

<script src="cross.js"></script>

<script>

//对外公开一个接口命名为test

Cross.on("test", function(data){

alert(data.t);

});

</script>

</head>

<body>

</body>

</html>

以上就是本文所述的iframe跨域的解决方案了,希望大家能够喜欢。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类