jQuery实现跨域iframe接口方法调用
作者:bea
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
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 onclick="call_b()">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跨域的解决方案了,希望大家能够喜欢。
有用 | 无用
代码如下:
(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 onclick="call_b()">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中的方法链(Method Chaining)介绍
- Javascript中的apply()方法浅析
- Javascript中的Callback方法浅析
- Javascript中的call()方法介绍
- Javascript中的高阶函数介绍
- Javascript中this关键字的一些小知识
- Javascript URI 解析介绍
- PHP+jQuery+Ajax实现多图片上传效果
- jQuery oLoader实现的加载图片和页面效果
- jQuery实现购物车数字加减效果
- jQuery+PHP实现动态数字展示特效
- jQuery+slidereveal实现的面板滑动侧边展出效果
- jQuery+jRange实现滑动选取数值范围特效
- jQuery实现加入购物车飞入动画效果
- jQuery插件实现大图全屏图片相册
- jQuery实现精美的多级下拉菜单特效
- jQuery实现菜单式图片滑动切换
- jQuery.Highcharts.js绘制柱状图饼状图曲线图