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脚本调试方法小结
Nov 24 Javascript
HTML代码中标签的全部属性 中文注释说明
Mar 26 Javascript
js+css实现增加表单可用性之提示文字
Jun 03 Javascript
浅析JavaScript中的类型和对象
Nov 29 Javascript
js实现日期级联效果
Jan 23 Javascript
javascript事件冒泡详解和捕获、阻止方法
Apr 12 Javascript
纯JS代码实现一键分享功能
Apr 20 Javascript
canvas时钟效果
Feb 16 Javascript
js中的面向对象入门
Mar 06 Javascript
Bootstrap Table中的多选框删除功能
Jul 15 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
Mar 22 Javascript
JavaScript实现密码强度实时验证
Mar 18 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程序员编程注意事项
2008/04/10 PHP
php结合表单实现一些简单功能的例子
2011/06/04 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
php json转换相关知识(小结)
2018/12/21 PHP
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
2019/05/14 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
Python实现基于C/S架构的聊天室功能详解
2018/07/07 Python
python浪漫表白源码
2019/04/05 Python
Python比较配置文件的方法实例详解
2019/06/06 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
python爬取招聘要求等信息实例
2020/11/20 Python
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
教师考察材料范文
2014/06/03 职场文书
2014年司机工作总结
2014/11/21 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android