最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript實現(xiàn)的雙向跨域插件分享

 更新時間:2015年01月31日 10:09:20   投稿:junjie  
這篇文章主要介紹了JavaScript實現(xiàn)的雙向跨域插件分享,本文實現(xiàn)把整個跨域過程抽象出來,封裝成一個JavaScript插件,需要的朋友可以參考下

由于瀏覽器(同源策略)限制,JavaScript 跨域的問題,一直是一個頗為棘手的問題。HTML5 提供了跨文檔消息傳輸?shù)墓δ?,在網(wǎng)頁文檔之間互相接收與發(fā)送信息。使用這個功能,不僅同源(域 + 端口號)的 Web 網(wǎng)頁之間可以互相通信,還可以在兩個不同域名之間實現(xiàn)跨域通信。

跨文檔消息傳輸Cross Document Messaging提供了postMessage方法在不同網(wǎng)頁文檔之間互相傳遞數(shù)據(jù),支持實時消息傳遞?,F(xiàn)在很多瀏覽器都將支持這個功能,比如Google Chrome 2.0+、Internet Explorer 8.0+、Firefox 3.0+、Opera 9.6+、Safari 4.0+等

那么,IE6、IE7等不支持 HTML5的瀏覽器怎么辦?

可以使用window.name方法,因為window.name的修改不涉及跨域問題,雖然使用起來不是特別理想,但效果還可以接受。
但是,我們總不能每次涉及到跨域都去寫一遍window.postMessage、window.addEventListener、window.name等等這些內(nèi)容吧。

為此,我把這整個跨域過程抽象出來,封裝成一個JavaScript 插件,解決雙向跨域問題,實現(xiàn)不同網(wǎng)頁文檔之間的實時通信,可以在兩個不同域名之間實現(xiàn)跨域通信。

demo下載地址:http://xiazai.jb51.net/201501/other/jcrossdomain_v2.rar,版本v2

javascript跨域插件jcrossdomain.js

復(fù)制代碼 代碼如下:

(function (win){
  /**
   * 沒有開花的樹
   * 2013/12/07 17:12
   */
  var _jcd = {
    isInited : false,
    elmt : false,
    hash : '',
    delims : ',',
    rand : function(){
      return (new Date).getTime()
    },
    msg : function(){
      alert('Warning: You must call init function at first');
    },
    init : function(callback, elmt){
      if(_jcd.isInited == true)
        return;
      _jcd.isInited = true;
      _jcd.elmt = elmt;
      if(win.postMessage){
        //瀏覽器支持 HTML5 postMessage 方法
        if(win.addEventListener){
          //支持火狐、谷歌等瀏覽器
          win.addEventListener("message", function(ev){
            callback.call(win, ev.data);
          },false);
        }else if(win.attachEvent){
          //支持IE瀏覽器
          win.attachEvent("onmessage", function(ev){
            callback.call(win, ev.data);
          });
        }
        _jcd.msg = function(data){
          _jcd.elmt.postMessage(data, '*');
        }
      }else{
        //瀏覽器不支持 HTML5 postMessage 方法,如IE6、7
        setInterval(function(){
          if (win.name !== _jcd.hash) {
            _jcd.hash = win.name;
            callback.call(win, _jcd.hash.split(_jcd.delims)[1]);
          }
        }, 50);
        _jcd.msg = function(data){
          _jcd.elmt.name = _jcd.rand() + _jcd.delims + data;
        }
      }
    }
  };

  var jcd = {

    initParent : function(callback, iframeId){
      _jcd.init(callback, document.getElementById(iframeId).contentWindow);
    },

    initChild : function(callback){
      _jcd.init(callback, win.parent);
    },

    sendMessage : function(data){
      _jcd.msg(data);
    }

  };
  win.jCrossDomain = jcd;
})(window);

父網(wǎng)頁中調(diào)用方法:

復(fù)制代碼 代碼如下:

//自定義回調(diào)函數(shù)
var cb = function(msg){
  alert("get msg:" + msg);
};

//初始化,載入回調(diào)函數(shù)和 iframe 的id
jCrossDomain.initParent(cb, 'iframeA');

//發(fā)消息
jCrossDomain.sendMessage('hello, child');

子網(wǎng)頁中調(diào)用方法:

復(fù)制代碼 代碼如下:

//自定義回調(diào)函數(shù)
var cb = function(msg){
  alert("get msg:" + msg);
};

//初始化,載入回調(diào)函數(shù)
jCrossDomain.initChild(cb);

//發(fā)消息
jCrossDomain.sendMessage('hello, parent');

模擬測試小提示:
為了實現(xiàn)不同域之間的通信,可以在操作系統(tǒng)的 hosts 文件添加兩個域名,進行模擬。

hosts 文件中添加兩個不同的域名
127.0.0.1  parent.com
127.0.0.1  child.com

程序猿的進化過程:

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)列表分頁功能

    微信小程序?qū)崿F(xiàn)列表分頁功能

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)列表分頁功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • js寫出遮罩層登陸框和對聯(lián)廣告并自動跟隨滾動條滾動

    js寫出遮罩層登陸框和對聯(lián)廣告并自動跟隨滾動條滾動

    這篇文章主要介紹了js寫出遮罩層登陸框和對聯(lián)廣告并自動跟隨滾動條滾動,需要的朋友可以參考下
    2014-04-04
  • JavaScript使用shift方法移除素組第一個元素實例分析

    JavaScript使用shift方法移除素組第一個元素實例分析

    這篇文章主要介紹了JavaScript使用shift方法移除素組第一個元素的用法,實例分析了javascript中shift方法的使用技巧,需要的朋友可以參考下
    2015-04-04
  • 原生JavaScript制作計算器

    原生JavaScript制作計算器

    本文給大家匯總了2個原生JavaScript實現(xiàn)的計算器功能的代碼,一個簡單一個稍微復(fù)雜些,小伙伴們根據(jù)自己的需要來選擇吧
    2016-10-10
  • Javascript中構(gòu)造函數(shù)要注意的一些坑

    Javascript中構(gòu)造函數(shù)要注意的一些坑

    JavaScript語言是一門面向?qū)ο蟮恼Z言,但JS中并沒有類的概念的。于是JavaScript采用構(gòu)造函數(shù)的方式來模擬類的效果,即我們通過函數(shù)來創(chuàng)建對象。這也證明了函數(shù)在JavaScript中具有非常重要的地位。本文主要介紹了Javascript中構(gòu)造函數(shù)的一些坑,需要的朋友可以參考。
    2017-01-01
  • 原生JavaScript實現(xiàn)簡單的圖形驗證碼

    原生JavaScript實現(xiàn)簡單的圖形驗證碼

    這篇文章主要為大家詳細介紹了如何利用原生JavaScript實現(xiàn)簡單的圖形驗證碼,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以參考下
    2023-11-11
  • Ajax清除瀏覽器js、css、圖片緩存的方法

    Ajax清除瀏覽器js、css、圖片緩存的方法

    為了減小瀏覽器與服務(wù)器之間網(wǎng)絡(luò)傳輸壓力,往往對靜態(tài)文件,如js,css,修飾的圖片做cache,也就是給這些文件的HTTP響應(yīng)頭加入 Expires和Cache-Control參數(shù),并指定緩存時間,這篇文章詳細介紹Ajax清楚瀏覽js、Css、圖片緩存的方法,有需要的朋友可以參考下
    2015-08-08
  • layer.confirm()右邊按鈕實現(xiàn)href的例子

    layer.confirm()右邊按鈕實現(xiàn)href的例子

    今天小編就為大家分享一篇layer.confirm()右邊按鈕實現(xiàn)href的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • BootStrap Datetimepicker 漢化的實現(xiàn)代碼

    BootStrap Datetimepicker 漢化的實現(xiàn)代碼

    這篇文章主要介紹了 BootStrap Datetimepicker 漢化的實現(xiàn)代碼,需要的朋友可以參考下
    2017-02-02
  • 單線程JavaScript實現(xiàn)異步過程詳解

    單線程JavaScript實現(xiàn)異步過程詳解

    這篇文章主要介紹了單線程JavaScript實現(xiàn)異步過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05

最新評論

宜君县| 镇平县| 尉氏县| 山阳县| 大邑县| 美姑县| 邮箱| 桂阳县| 黄骅市| 辽宁省| 吉安市| 金寨县| 五大连池市| 阳曲县| 黔西县| 托克逊县| 巴彦淖尔市| 巴东县| 靖江市| 运城市| 绥阳县| 太和县| 吉木乃县| 阳泉市| 和平县| 临江市| 阿合奇县| 中山市| 阜阳市| 涞源县| 金乡县| 云和县| 新泰市| 招远市| 蒙阴县| 平武县| 青神县| 古浪县| 东丰县| 河北省| 甘肃省|