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实现jQuery的$.getJSON的解决方法
May 03 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
Jun 29 Javascript
javascript+canvas实现刮刮卡抽奖效果
Jul 29 Javascript
利用Node.JS实现邮件发送功能
Oct 21 Javascript
javascript 正则表达式去空行方法
Jan 24 Javascript
JavaScript实现网页头部进度条刷新
Apr 16 Javascript
Angular中的interceptors拦截器
Jun 25 Javascript
AngularJS 打开新的标签页实现代码
Sep 07 Javascript
JS模拟实现哈希表及应用详解
May 04 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
Sep 25 Javascript
深入了解JS之作用域和闭包
Jun 16 Javascript
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程序效率优化的一些策略小结
2010/07/17 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
PHP打印输出函数汇总
2016/08/28 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
2015/09/04 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
React Native中的RefreshContorl下拉刷新使用
2017/10/09 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
如何在VUE中使用vue-awesome-swiper
2021/01/04 Vue.js
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
运动会广播稿200字
2014/01/15 职场文书
招聘与培训专员岗位职责
2014/01/30 职场文书
奉献演讲稿范文
2014/05/21 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
创业计划书之花店
2019/09/20 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
Win11黑色桌面背景怎么办?Win11黑色壁纸解决方法汇总
2022/04/05 数码科技