jQuery はクロスドメイン iframe インターフェイス メソッド calling_jquery を実装します

WBOY
リリース: 2016-05-16 16:09:32
オリジナル
1150 人が閲覧しました

cross.js

复制代 代码如下:

(関数(グローバル){
  global.Cross = {
    signalHandler: {}、
    on: function(signal, func){
      this.signalHandler[信号] = func;
    }、
    呼び出し: function(win、domain、signal、data、callbackfunc){
      var Notice = {"signal": 信号、"data": データ};
      if(!!callbackfunc){
          Notice["callback"] = "callback_" new Date().getTime();
          Cross.on(notice["callback"], callbackfunc);
      }
      var NoticeStr = JSON.stringify(notice);
      win.postMessage(noticeStr, ドメイン);
    }
  };
  $(window).on("メッセージ", function(e) {
    var realEvent = e.originalEvent,
        データ = realEvent.data,
        swin = realEvent.source,
        原点 = realEvent.origin,
        プロトコル;
    {
を試してください         プロトコル = JSON.parse(data);
        var result = global.Cross.signalHandler[protocol.signal].call(null, protocol.data);
        if(!!プロトコル["コールバック"]){
          Cross.call(swin, オリジン, プロトコル["コールバック"], {結果: 結果});
        }
        if(/^callback_/.test(protocol.signal)){
          削除 Cross.signalHandler[プロトコル.シグナル];
        }
    } キャッチ (e) {
      console.log(e);
      throw new Error("クロスエラー。");
    }
  });
})(ウィンドウ);

a.html

复制代 代码如下:



  <頭>
   
    <スクリプト src="cross.js">
    <スクリプト>
      関数 call_b(){
        var ifw = $("#ifr")[0].contentWindow;
        //iframe 用の子页面の公開テストインターフェイス、子页面ドメイン名はhttp://localhost:8088
        Cross.call(ifw,"http://localhost:8088","test",{t: $("#txt").val()});
      }