jQuery实现跨域iframe接口方法调用

 更新时间:2015年03月14日 10:53:58   投稿:hebedich  
页面a.html域名为www.a.com嵌入页面http://www.b.com/b.html,b.html要调用a.html中的js函数,由于两个页面不在一个域中,会提示没权限。如何解决该问题呢,请看下面示例代码。

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跨域的解决方案了,希望大家能够喜欢。

相关文章

  • 解决jquery版本冲突的有效方法

    解决jquery版本冲突的有效方法

    这篇文章主要介绍了解决jquery版本冲突的有效方法,对于web设计的兼容性调试很有借鉴价值,需要的朋友可以参考下
    2014-09-09
  • jquery css 设置table的奇偶行背景色示例

    jquery css 设置table的奇偶行背景色示例

    jquery css 设置table的奇偶行背景色
    2014-06-06
  • jQuery UI 实现email输入提示实例

    jQuery UI 实现email输入提示实例

    本文为大家介绍下使用jQuery UI 实现email输入提示,具体思路如下,感兴趣的朋友可以参考下
    2013-08-08
  • jquery实现全选功能

    jquery实现全选功能

    这篇文章主要为大家详细介绍了jquery实现全选功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • JQuery学习笔记 实现图片翻转效果和TAB标签切换效果

    JQuery学习笔记 实现图片翻转效果和TAB标签切换效果

    为了保证前台页面的整洁,我们习惯性地将CSS放入一个单独的.CSS文件中以便调用,而JS也同样可以放到单独的JS文件中去,并且页面上的事件如onclick,onmouseover也可以分离出来,现在网上比较流行JQuery
    2008-11-11
  • 移动端jQuery修正Web页面滑动时div问题的两则实例

    移动端jQuery修正Web页面滑动时div问题的两则实例

    这篇文章主要介绍了移动端jQuery修正Web页面滑动时div问题的两则实例,分别针对顶部固定fixed不为0时滑动出现的闪动以及touchmove的受阻止的相关问题,需要的朋友可以参考下
    2016-05-05
  • jquery延迟对象解析

    jquery延迟对象解析

    第一次认识jquery延迟对象,这篇文章主要为大家详细解析JQ延迟对象的相关概念,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • jQuery给元素添加样式的方法详解

    jQuery给元素添加样式的方法详解

    这篇文章主要介绍了jQuery给元素添加样式的方法,结合实例形式详细分析了jQuery给元素添加样式的各种常见操作技巧,需要的朋友可以参考下
    2015-12-12
  • jQuery写fadeTo示例代码

    jQuery写fadeTo示例代码

    这篇文章主要介绍了使用jQuery写的fadeTo,需要的朋友可以参考下
    2014-02-02
  • jQuery操作JSON的CRUD用法实例

    jQuery操作JSON的CRUD用法实例

    这篇文章主要介绍了jQuery操作JSON的CRUD用法,实例分析了jQuery进行CURD的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02

最新评论