jQuery实现跨域iframe接口方法调用


Posted in Javascript onMarch 14, 2015

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跨域的解决方案了,希望大家能够喜欢。

Javascript 相关文章推荐
javascript第一课
Feb 27 Javascript
IE与firefox下Dhtml的一些区别小结
Dec 02 Javascript
jquery 操作两个select实现值之间的互相传递
Mar 07 Javascript
JS中自定义定时器让它在某一时刻执行
Sep 02 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
Apr 15 Javascript
jQuery 选择符详细介绍及整理
Dec 02 Javascript
Ionic2调用本地SQlite实例
Apr 22 Javascript
vue-router路由参数刷新消失的问题解决方法
Jun 17 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
Jan 12 Javascript
jQuery中图片展示插件highslide.js的简单dom
Apr 22 jQuery
彻底揭秘keep-alive原理(小结)
May 05 Javascript
javascript异步处理与Jquery deferred对象用法总结
Jun 04 jQuery
Flash图片上传组件 swfupload使用指南
Mar 14 #Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
Mar 14 #Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
Mar 14 #Javascript
javascript实现数独解法
Mar 14 #Javascript
SuperSlide标签切换、焦点图多种组合插件
Mar 14 #Javascript
纯javascript实现简单下拉刷新功能
Mar 13 #Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
Mar 13 #Javascript
You might like
PHP 接入支付宝即时到账功能
2016/09/18 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
php之可变变量的实例详解
2017/09/12 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
设定php简写功能的方法
2019/11/28 PHP
javascript Demo模态窗口
2009/12/06 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
python清除指定目录内所有文件中script的方法
2015/06/30 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
python如何求解两数的最大公约数
2018/09/27 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
个人教师自我评价范文
2013/12/02 职场文书
交通事故检查书范文
2014/01/30 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
地方课程教学计划
2015/01/19 职场文书
检讨书范文1000字
2015/01/28 职场文书
今日说法观后感
2015/06/08 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
毕业酒会致辞
2015/07/29 职场文书
商场广播稿范文
2015/08/19 职场文书
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
Spring整合Mybatis的全过程
2021/06/28 Java/Android