实现跨域iframe接口方法调用 简单介绍
页面a.html域名为,嵌入页面/b.html.
b.html要调用a.html中的js函数,由于两个页面不在一个域中,会提示没权限。
下面就介绍一下如何如何解决此问题,需要的朋友可以做一下参考。
一.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>
<meta charset="utf-8">
<meta name="author" content="/" />
<title>实例</title>
<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接口, 子页面域名为localhost:8088
Cross.call(ifw,"localhost:8088","test",{t: $("#txt").val()});
}
</script>
</head>
<body>
<input id="txt" type="text"/>
<button>call</button>
<iframe id="ifr" src="localhost:8088/b.html"></iframe>
</body>
</html>
三.b.html代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="/" />
<title>实例</title>
<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>
声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至201542412@QQ.com举报,一经查实,本站将立刻删除。
相关推荐
-
通过鼠标拖动选取指定数字代码实例
在不少的应用中,选取数字的时候可以通过鼠标拖动来实现,这样的效果人性化的很。下面就分享一个插件实现了这样的功能,这就是jRng,它是利用jQury实现的。一.HTML代码部分:首先载入jQur
-
js实现的获取选中文本代码实例
本章节介绍一下如何或者被选中的文本内容。非常的简单,需要的朋友可以做一下参考,代码实例如下:
-
nodeJS代码实现计算交社保代码实例
下面是一段比较实用的代码实例,是关于交社保的计算。代码实例如下:fuckShbo: function (rq, rs, nxt) { //每个月1800的社保 vr dy = (18
-
node.js [superAgent]请求简单代码实例
下面分享几个不同类型的nod.js [surgnt]请求代码片段。需要的朋友可以做一下参考,下面进入正题。一.ost请求:rqust.ost(/i/t).nd(functi
-
javascript实现的动态设置元素透明度代码实例
本章节分享一段代码实例,它实现了动态设置元素透明度的效果。并且能够兼容当前主流的浏览器包括低版本的I浏览器。代码实例如下: chrs