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 this 的一些学习总结
Aug 02 Javascript
js设置控件的隐藏与显示的两种方法
Aug 21 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
Jun 08 Javascript
sea.js常用的api简易文档
Nov 15 Javascript
AngularJS实现网站换肤实例
Feb 19 Javascript
js数组实现权重概率分配
Sep 12 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
Oct 24 Javascript
vue2中的keep-alive使用总结及注意事项
Dec 21 Javascript
详解webpack提取第三方库的正确姿势
Dec 22 Javascript
jquery.param()实现数组或对象的序列化方法
Oct 08 jQuery
详解JavaScript 作用域
Jul 14 Javascript
VUE解决跨域问题Access to XMLHttpRequest at
May 06 Vue.js
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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
php并发加锁示例
2016/10/17 PHP
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
js面向对象之公有、私有、静态属性和方法详解
2015/04/17 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
Javascript中return的使用与闭包详解
2017/01/11 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
HTML5有哪些新特征
2015/12/01 HTML / CSS
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
怎样写好自我鉴定
2013/12/04 职场文书
班组长工作职责
2013/12/25 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
万年牢教学反思
2014/02/15 职场文书
大雁塔导游词
2015/02/04 职场文书
行政处罚告知书
2015/07/01 职场文书
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android