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

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

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

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

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

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

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

為此,我把這整個(gè)跨域過程抽象出來,封裝成一個(gè)JavaScript 插件,解決雙向跨域問題,實(shí)現(xiàn)不同網(wǎng)頁文檔之間的實(shí)時(shí)通信,可以在兩個(gè)不同域名之間實(shí)現(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');

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

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

程序猿的進(jìn)化過程:

相關(guān)文章

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

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

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

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

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

    JavaScript使用shift方法移除素組第一個(gè)元素實(shí)例分析

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

    原生JavaScript制作計(jì)算器

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

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

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

    原生JavaScript實(shí)現(xiàn)簡(jiǎn)單的圖形驗(yàn)證碼

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

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

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

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

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

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

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

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

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

最新評(píng)論

通山县| 固镇县| 麻江县| 宜都市| 台湾省| 松滋市| 四平市| 瑞安市| 长子县| 象山县| 晋江市| 宁明县| 松桃| 乐清市| 扶绥县| 宜州市| 镇原县| 齐齐哈尔市| 东阳市| 昌黎县| 巴林右旗| 长沙市| 南充市| 白城市| 安顺市| 咸宁市| 石柱| 新郑市| 晋江市| 天津市| 衡东县| 苏尼特右旗| 正蓝旗| 巴彦县| 广东省| 汽车| 漠河县| 游戏| 霞浦县| 玛多县| 抚宁县|