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 相关文章推荐
用jquery实现学校的校历(asp.net+jquery ui 1.72)
Jan 01 Javascript
JavaScript入门之基本函数详解
Oct 21 Javascript
js innerHTML 改变div内容的方法
Aug 03 Javascript
jQuery处理xml格式的返回数据(实例解析)
Nov 28 Javascript
微信小程序  action-sheet详解及实例代码
Nov 09 Javascript
AngualrJs清除定时器遇到的坑
Oct 13 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
Oct 26 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
May 17 Javascript
js中Object.defineProperty()方法的不详解
Jul 09 Javascript
vue引入axios同源跨域问题
Sep 27 Javascript
vue 对axios get pust put delete封装的实例代码
Jan 05 Javascript
React实现全选功能
Aug 25 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
怎么使 Mysql 数据同步
2006/10/09 PHP
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
openPNE常用方法分享
2011/11/29 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
纯JavaScript实现的分页插件实例
2015/07/14 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
2017/02/27 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
Node.js 使用jade模板引擎的示例
2018/05/11 Javascript
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
python函数参数*args**kwargs用法实例
2013/12/04 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
python字典的值可以修改吗
2020/06/29 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
Ibatis如何使用动态表名
2015/07/12 面试题
物理学专业自荐信
2014/06/11 职场文书
幼师求职信
2014/06/23 职场文书
党员个人公开承诺书
2014/08/29 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
2014年信用社工作总结
2014/11/25 职场文书
个人年终总结开头
2015/03/06 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python
MySQL系列之四 SQL语法
2021/07/02 MySQL