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 实现双色表格实现代码
Nov 24 Javascript
javascript动态加载实现方法一
Aug 22 Javascript
JavaScript自执行闭包的小例子
Jun 29 Javascript
window.returnValue使用方法示例介绍
Jul 03 Javascript
ES6的新特性概览
Mar 10 Javascript
Javascript6中字符串的四个新用法分享
Sep 11 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
Oct 10 Javascript
javascript笔记之匿名函数和闭包
Feb 06 Javascript
js实现股票实时刷新数据案例
May 14 Javascript
利用vue+elementUI实现部分引入组件的方法详解
Nov 22 Javascript
vue中子组件调用兄弟组件方法
Jul 06 Javascript
微信小程序实现上传图片裁剪图片过程解析
Aug 22 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/05/28 PHP
php组合排序简单实现方法
2016/10/15 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
js异或加解密效果代码
2008/06/25 Javascript
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
JS全角与半角转化实例(分享)
2017/07/04 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
Python程序设计入门(3)数组的使用
2014/06/16 Python
Python中title()方法的使用简介
2015/05/20 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
对pandas中apply函数的用法详解
2018/04/10 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
Python编程深度学习绘图库之matplotlib
2018/12/28 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
如何使用python写截屏小工具
2020/09/29 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
广告设计专业自荐信范文
2013/11/14 职场文书
力学专业毕业生自荐信
2013/11/17 职场文书
打架检讨书范文
2015/01/27 职场文书
经典祝酒词大全
2015/08/12 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书
Vue全局事件总线你了解吗
2022/02/24 Vue.js
使用MybatisPlus打印sql语句
2022/04/22 SQL Server