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 相关文章推荐
纯js实现div内图片自适应大小(已测试,兼容火狐)
Jun 16 Javascript
jQuery中contents()方法用法实例
Jan 08 Javascript
jQuery实用技巧必备(下)
Nov 03 Javascript
JavaScript实现获取远程的html到当前页面中
Mar 26 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
Apr 01 jQuery
JavaScript ES6中const、let与var的对比详解
Jun 18 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
Aug 25 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
Aug 28 jQuery
vue数据初始化initState的实例详解
Apr 11 Javascript
Vue登录主页动态背景短视频制作
Sep 21 Javascript
Node.js控制台彩色输出的方法与原理实例详解
Dec 01 Javascript
JavaScript前端开发时数值运算的小技巧
Jul 28 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实现用session来实现记录用户登陆信息
2018/10/15 PHP
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
详解操作虚拟dom模拟react视图渲染
2018/07/25 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
javascript实现拼图游戏
2021/01/29 Javascript
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
python同步windows和linux文件
2019/08/29 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
全民健身日活动方案
2014/01/29 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
体育专业求职信
2014/07/16 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年物流工作总结
2014/11/25 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
React列表栏及购物车组件使用详解
2021/06/28 Javascript
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript