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 相关文章推荐
在textarea文本域中显示HTML代码的方法
Mar 06 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
May 12 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
Mar 28 Javascript
Jquery Mobile 自定义按钮图标
Nov 18 Javascript
详解AngularJS中module模块的导入导出
Dec 10 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
Jul 01 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
微信小程序 本地数据读取实例
Apr 27 Javascript
JavaScript 2018 中即将迎来的新功能
Sep 21 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
Feb 22 Javascript
JavaScript变量作用域及内存问题实例分析
Jun 10 Javascript
vue 出现data-v-xxx的原因及解决
Aug 04 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
中东人咖啡哲学
2021/03/03 咖啡文化
php 文件上传类代码
2011/08/06 PHP
分享php分页的功能模块
2015/06/16 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
2013/11/12 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
2019/03/08 Javascript
javascript解析json格式的数据方法详解
2020/08/07 Javascript
pycharm安装图文教程
2017/05/02 Python
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
学习Django知识点分享
2019/09/11 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
师范生自我鉴定范文
2013/10/05 职场文书
医学专业毕业生个人的求职信
2013/12/04 职场文书
大学生职业规划论文
2014/01/11 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
大学生找工作求职信
2014/07/09 职场文书
社会工作专业求职信
2014/07/15 职场文书
党性观念心得体会
2014/09/03 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
大二学生自我检讨书
2014/10/23 职场文书
2014年减负工作总结
2014/12/10 职场文书
先进个人事迹材料
2014/12/29 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
Python实现生成bmp图像的方法
2021/06/13 Python
总结几个非常实用的Python库
2021/06/26 Python