Return to Snippet

Revision: 63143
at April 11, 2013 07:52 by sarpay


Initial Code
(function($) {
  function parseImagesFromCSS(doc) {
    var i, j,
      rule,
      image,
      pattern = /url\((.*)\)/,
      properties = ['background-image', '-webkit-border-image'],
      images = {};
 
    if (doc.styleSheets) {
      for (i = 0; i < doc.styleSheets.length; ++i) {
        images = $.extend(images, parseImagesFromCSS(doc.styleSheets[i]));
      }
    } else if (doc.cssRules) {
      for (i = 0; i < doc.cssRules.length; ++i) {
        rule = doc.cssRules[i];
        if (rule.styleSheet) {
          images = $.extend(images, parseImagesFromCSS(rule.styleSheet));
        } else if (rule.style) {
          for (j=0; j < properties.length; j++) {
            image = pattern.exec(rule.style.getPropertyValue(properties[j]));
            if (image && image.length === 2) {
              images[image[1]] = image[0];
            }
          }
        }
      }
    }
    return images;
  };
  $.extend({
    preload: {
      images: function(doc) {
        doc = doc || document;
        var images = $.map(parseImagesFromCSS(doc), function(url) { return url; }),
          head = doc.getElementsByTagName('head')[0],
          style = doc.createElement('style');
        style.type = 'text/css';
        style.id = 'preload';
        style.innerHTML = 'body::after { content: ' + images.join(' ') + '; display: none; }';
        head.appendChild(style);
      }
    }
  });
})(jQuery);

Initial URL


Initial Description
will preload any background image referenced in your CSS.

Initial Title
Preload all bg images referenced in CSS

Initial Tags
image, jquery

Initial Language
JavaScript