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之通用简单的table选项卡实现(二)
May 09 Javascript
jQuery中index()的用法分析
Sep 05 Javascript
3种Jquery限制文本框只能输入数字字母的方法
Dec 03 Javascript
jquery实现华丽的可折角广告代码
Sep 02 Javascript
一种新的javascript对象创建方式Object.create()
Dec 28 Javascript
select下拉框插件jquery.editable-select详解
Jan 22 Javascript
JavaScript 函数的定义-调用、注意事项
Apr 16 Javascript
react 父组件与子组件之间的值传递的方法
Sep 14 Javascript
jQuery实现的自定义轮播图功能详解
Dec 28 jQuery
微信小程序canvas截取任意形状的实现代码
Jan 13 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
Apr 16 Javascript
利用js实现简易红绿灯
Oct 15 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读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
python中的reduce内建函数使用方法指南
2014/08/31 Python
Python中用max()方法求最大值的介绍
2015/05/15 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
python实现Decorator模式实例代码
2018/02/09 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
python调用动态链接库的基本过程详解
2019/06/19 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
python可以用哪些数据库
2020/06/22 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
Matplotlib animation模块实现动态图
2021/02/25 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
.net面试题
2015/12/22 面试题
应届毕业生求职自荐书
2014/01/03 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
幼儿园大班评语大全
2014/04/17 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
2014年消防工作总结
2014/11/21 职场文书
入党申请书怎么写?
2019/06/11 职场文书
Go语言grpc和protobuf
2022/04/13 Golang