亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Js判斷CSS文件加載完畢的具體實現

2019-11-20 21:14:04
字體:
來源:轉載
供稿:網友

要判斷這個 CSS 文件是否加載完畢,各個瀏覽器的做法差異比較大,這次要說IE瀏覽器做的不錯,我們可以直接通過onload方法來處理CSS加載完成以后的處理:

復制代碼 代碼如下:

// 代碼節選至seajs
function styleOnload(node, callback) {
    // for IE6-9 and Opera
    if (node.attachEvent) {
      node.attachEvent('onload', callback);
      // NOTICE:
      // 1. "onload" will be fired in IE6-9 when the file is 404, but in
      // this situation, Opera does nothing, so fallback to timeout.
      // 2. "onerror" doesn't fire in any browsers!
    }
}

很遺憾,這次在其他的瀏覽器中,想判斷CSS是否加載完成就不是那么方便了,FF,webkit可以通過node.sheet.cssRules屬性是否存在來判斷是否加載完畢。而且需要使用setTimeout間隔事件輪詢:

復制代碼 代碼如下:

// 代碼節選至seajs
function poll(node, callback) {
    if (callback.isCalled) {
      return;
    }
    var isLoaded = false;
    if (/webkit/i.test(navigator.userAgent)) {//webkit
      if (node['sheet']) {
        isLoaded = true;
      }
    }
    // for Firefox
    else if (node['sheet']) {
      try {
        if (node['sheet'].cssRules) {
          isLoaded = true;
        }
      } catch (ex) {
        // NS_ERROR_DOM_SECURITY_ERR
        if (ex.code === 1000) {
          isLoaded = true;
        }
      }
    }
    if (isLoaded) {
      // give time to render.
      setTimeout(function() {
        callback();
      }, 1);
    }
    else {
      setTimeout(function() {
        poll(node, callback);
      }, 1);
    }
  }

setTimeout(function() {
     poll(node, callback);
}, 0);

SeaJS給出的完整的處理是這樣的:

復制代碼 代碼如下:

function styleOnload(node, callback) {
    // for IE6-9 and Opera
    if (node.attachEvent) {
      node.attachEvent('onload', callback);
      // NOTICE:
      // 1. "onload" will be fired in IE6-9 when the file is 404, but in
      // this situation, Opera does nothing, so fallback to timeout.
      // 2. "onerror" doesn't fire in any browsers!
    }
    // polling for Firefox, Chrome, Safari
    else {
      setTimeout(function() {
        poll(node, callback);
      }, 0); // for cache
    }
  }
  function poll(node, callback) {
    if (callback.isCalled) {
      return;
    }
    var isLoaded = false;
    if (/webkit/i.test(navigator.userAgent)) {//webkit
      if (node['sheet']) {
        isLoaded = true;
      }
    }
    // for Firefox
    else if (node['sheet']) {
      try {
        if (node['sheet'].cssRules) {
          isLoaded = true;
        }
      } catch (ex) {
        // NS_ERROR_DOM_SECURITY_ERR
        if (ex.code === 1000) {
          isLoaded = true;
        }
      }
    }
    if (isLoaded) {
      // give time to render.
      setTimeout(function() {
        callback();
      }, 1);
    }
    else {
      setTimeout(function() {
        poll(node, callback);
      }, 1);
    }
  }
// 我的動態創建LINK函數
function createLink(cssURL,lnkId,charset,media){
    var head = document.getElementsByTagName('head')[0],
        linkTag = null;

 if(!cssURL){
     return false;
 }

    linkTag = document.createElement('link');
 linkTag.setAttribute('id',(lnkId || 'dynamic-style'));
 linkTag.setAttribute('rel','stylesheet');
 linkTag.setAttribute('charset',(charset || 'utf-8'));
 linkTag.setAttribute('media',(media||'all'));
 linkTag.setAttribute('type','text/css');
    linkTag.href = cssURL;

    head.appendChild(linkTag);
}
function loadcss(){
    var styleNode = createLink('/wp-content/themes/BlueNight/style.css');

    styleOnload(styleNode,function(){
        alert("loaded");
    });
}

在看到seajs的代碼的時候,我立刻想起了我看到Diego Perini的另一個解決方案:
復制代碼 代碼如下:

/*
 * Copyright (C) 2010 Diego Perini
 * All rights reserved.
 *
 * cssready.js - CSS loaded/ready state notification
 *
 * Author: Diego Perini <diego.perini at gmail com>
 * Version: 0.1
 * Created: 20100616
 * Release: 20101104
 *
 * License:
 *  //www.49028c.com * Download:
 *  http://javascript.nwbox.com/cssready/cssready.js
 */
function cssReady(fn, link) {
  var d = document,
  t = d.createStyleSheet,
  r = t ? 'rules' : 'cssRules',
  s = t ? 'styleSheet' : 'sheet',
  l = d.getElementsByTagName('link');
  // passed link or last link node
  link || (link = l[l.length - 1]);
  function check() {
    try {
      return link && link[s] && link[s][r] && link[s][r][0];
    } catch(e) {
      return false;
    }
  }
  (function poll() {
    check() && setTimeout(fn, 0) || setTimeout(poll, 100);
  })();
}

其實,如果你讀過jQuery的domready事件的判斷的代碼,原理也類似。也是通過setTimeout輪詢的方式來判斷DOM節點是否加載完畢。
還有,Fackbook則是通過在動態創建的CSS樣式中包含一個固定的樣式,例如#loadcssdom,loadcssdom就是一個高度為1px樣式。然后動態創建一個DOM對象,添加這個loadcssdom樣式。然后也是setTimeout輪詢loadcssdo是否已經有1px的高度了。這個處理方式的解決方案,大家可以下《CSSP: Loading CSS with Javascript 亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

国产日韩精品电影| 欧美丝袜美女中出在线| 欧美午夜精品久久久久久人妖| 亚洲成人黄色网| www.美女亚洲精品| 欧美贵妇videos办公室| 欧美成人中文字幕在线| 亚洲国产精品电影| 久久精品国产亚洲| 国产精品视频yy9099| 国精产品一区一区三区有限在线| 成人a在线观看| 亚洲自拍偷拍在线| 欧美日韩国产一区二区三区| 欧美亚洲另类激情另类| 一区二区欧美亚洲| 精品无人区太爽高潮在线播放| 欧美色另类天堂2015| 日韩暖暖在线视频| 日韩精品免费一线在线观看| 538国产精品一区二区免费视频| 国产精品成人播放| 国内精品模特av私拍在线观看| 欧美高清理论片| 亚洲高清色综合| 欧美日韩亚洲视频| 亚洲已满18点击进入在线看片| 日韩中文字幕网址| 久久久亚洲国产天美传媒修理工| 久久香蕉国产线看观看网| 欧美洲成人男女午夜视频| 97热精品视频官网| 欧美性xxxx18| 日韩电视剧免费观看网站| 久久久久亚洲精品成人网小说| 亚洲天堂网站在线观看视频| 久久久中文字幕| 亚洲美女av网站| 亚洲色图15p| 久久久久成人网| 国产精品毛片a∨一区二区三区|国| 日韩电影视频免费| 日韩在线精品一区| 国产精品中文字幕久久久| 国产精品第1页| 欧美极品少妇xxxxⅹ免费视频| 91中文精品字幕在线视频| 中文字幕日韩欧美在线视频| 欧洲一区二区视频| 日韩有码在线播放| 色一情一乱一区二区| 亚洲成av人乱码色午夜| 成人黄色在线观看| 久久影院资源站| 国产成人综合亚洲| 91po在线观看91精品国产性色| 亚洲精品一区中文字幕乱码| 国产精品久久久一区| 精品偷拍各种wc美女嘘嘘| 国产成人精品在线视频| 亚洲国产高清高潮精品美女| 国产自产女人91一区在线观看| 国产人妖伪娘一区91| 福利精品视频在线| 久久影视电视剧免费网站| 欧美在线视频导航| 精品在线观看国产| 久久精品国产一区二区电影| 久久久久久久91| 91美女片黄在线观看游戏| 97国产suv精品一区二区62| 国产精选久久久久久| 97精品在线视频| 久久91亚洲人成电影网站| 欧美日韩另类在线| 欧美国产日韩一区二区三区| 日韩有码在线观看| 日韩精品视频在线观看网址| 亚洲人成网站999久久久综合| 国产激情久久久久| 亚洲精品黄网在线观看| 亚洲影院色无极综合| 国产精品嫩草影院一区二区| 国产男人精品视频| 97视频在线观看免费| 久久免费精品视频| 一本色道久久88综合日韩精品| 国产精品久久av| 成人女保姆的销魂服务| 欧美电影免费观看| 亚洲国产欧美自拍| 中文字幕在线观看亚洲| 久国内精品在线| 亚洲成人黄色网| 久久精品最新地址| 国产性色av一区二区| 精品国产91乱高清在线观看| 综合激情国产一区| 亚洲欧美日韩一区二区在线| 国产精品老女人视频| 国产精品久久久久国产a级| 81精品国产乱码久久久久久| 日本精品性网站在线观看| 亚洲人免费视频| 视频在线一区二区| 日韩欧美a级成人黄色| 亚洲www永久成人夜色| 97香蕉久久超级碰碰高清版| 国产精品丝袜高跟| 日韩美女免费线视频| 成人免费xxxxx在线观看| 国产欧美日韩中文字幕在线| 一区二区三区四区视频| 国产99视频在线观看| 国产精品久久久久久久久免费| 91精品久久久久久久久久另类| 精品少妇v888av| 成人黄色大片在线免费观看| 久久久日本电影| 中文字幕欧美视频在线| 57pao国产成人免费| 国产成人精品在线观看| 97视频在线观看网址| 91丨九色丨国产在线| 欧美性猛交xxxx偷拍洗澡| 亚洲一区999| 国产欧美一区二区三区在线| 国内精品视频在线| 国内精品久久久久久久| 成人精品一区二区三区电影黑人| 亚洲美女在线观看| 精品中文视频在线| 色妞久久福利网| 日本一本a高清免费不卡| 亚洲欧美国产高清va在线播| 欧美日韩在线免费| 成人欧美一区二区三区在线| 欧美亚洲免费电影| 中文字幕日韩精品有码视频| 一本色道久久88综合亚洲精品ⅰ| 日本在线观看天堂男亚洲| 精品无人区太爽高潮在线播放| 欧美性猛交xxxx乱大交极品| 欧美电影免费在线观看| 欧美日韩性生活视频| 国产精品露脸av在线| 日韩在线观看高清| 成人福利网站在线观看11| 日韩电影第一页| 国产91ⅴ在线精品免费观看| 97超级碰碰碰久久久| 中国china体内裑精亚洲片| 美女av一区二区三区| 91超碰中文字幕久久精品| 亚洲精品福利在线| 亚洲男人天堂网| 成年无码av片在线| 久久久国产精品x99av| 精品中文字幕在线2019| 日韩av综合网站| 欧美日韩一区二区精品| 亚洲人成网站777色婷婷| 国产在线观看一区二区三区| 日韩av最新在线|