国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

jQuery實現跨域iframe接口方法調用

2024-05-06 16:16:48
字體:
來源:轉載
供稿:網友
頁面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跨域的解決方案了,希望大家能夠喜歡。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 赤壁市| 梓潼县| 资溪县| 内江市| 安岳县| 巴彦淖尔市| 靖宇县| 苍溪县| 阿坝县| 青神县| 新宾| 本溪| 乌拉特中旗| 左云县| 古浪县| 江津市| 通化县| 九龙坡区| 高州市| 丹巴县| 德昌县| 手机| 陵川县| 乌鲁木齐市| 枣阳市| 平度市| 连云港市| 炉霍县| 新郑市| 龙海市| 古田县| 大丰市| 宁明县| 赫章县| 乌审旗| 新竹县| 扎兰屯市| 夏邑县| 澄迈县| 宣恩县| 梅州市|