demo/load-event/js/libs/modernizr/modernizr-custom.js
function injectElementWithStyles(rule, callback, nodes, testnames) {
    var mod = 'modernizr';
    var style;
    var ret;
    var node;
    var docOverflow;
    var div = createElement('div');
    var body = getBody();

    if (parseInt(nodes, 10)) {
      // In order not to give false positives we create a node for each test
      // This also allows the method to scale for unspecified uses
      while (nodes--) {
        node = createElement('div');
        node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
        div.appendChild(node);
      }
    }

    style = createElement('style');
    style.type = 'text/css';
    style.id = 's' + mod;

    // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.
    // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270
    (!body.fake ? div : body).appendChild(style);
    body.appendChild(div);

    if (style.styleSheet) {
      style.styleSheet.cssText = rule;
    } else {
      style.appendChild(document.createTextNode(rule));
    }
    div.id = mod;

    if (body.fake) {
      //avoid crashing IE8, if background image is used
      body.style.background = '';
      //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible
      body.style.overflow = 'hidden';
      docOverflow = docElement.style.overflow;
      docElement.style.overflow = 'hidden';
      docElement.appendChild(body);
    }

    ret = callback(div, rule);
    // If this is done after page load we don't want to remove the body so check if body exists
    if (body.fake) {
      body.parentNode.removeChild(body);
      docElement.style.overflow = docOverflow;
      // Trigger layout so kinetic scrolling isn't disabled in iOS6+
      docElement.offsetHeight;
    } else {
      div.parentNode.removeChild(div);
    }

    return !!ret;

  }
function injectElementWithStyles(rule, callback, nodes, testnames) {
    var mod = 'modernizr';
    var style;
    var ret;
    var node;
    var docOverflow;
    var div = createElement('div');
    var body = getBody();

    if (parseInt(nodes, 10)) {
      // In order not to give false positives we create a node for each test
      // This also allows the method to scale for unspecified uses
      while (nodes--) {
        node = createElement('div');
        node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
        div.appendChild(node);
      }
    }

    style = createElement('style');
    style.type = 'text/css';
    style.id = 's' + mod;

    // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.
    // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270
    (!body.fake ? div : body).appendChild(style);
    body.appendChild(div);

    if (style.styleSheet) {
      style.styleSheet.cssText = rule;
    } else {
      style.appendChild(document.createTextNode(rule));
    }
    div.id = mod;

    if (body.fake) {
      //avoid crashing IE8, if background image is used
      body.style.background = '';
      //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible
      body.style.overflow = 'hidden';
      docOverflow = docElement.style.overflow;
      docElement.style.overflow = 'hidden';
      docElement.appendChild(body);
    }

    ret = callback(div, rule);
    // If this is done after page load we don't want to remove the body so check if body exists
    if (body.fake) {
      body.parentNode.removeChild(body);
      docElement.style.overflow = docOverflow;
      // Trigger layout so kinetic scrolling isn't disabled in iOS6+
      docElement.offsetHeight;
    } else {
      div.parentNode.removeChild(div);
    }

    return !!ret;

  }
function injectElementWithStyles ( rule , callback , nodes , testnames ) { var mod = 'modernizr' ; var style ; var ret ; var node ; var docOverflow ; var div = createElement ( 'div' ) ; var body = getBody ( ) ; if ( parseInt ( nodes , 10 ) ) { // In order not to give false positives we create a node for each test // This also allows the method to scale for unspecified uses while ( nodes -- ) { node = createElement ( 'div' ) ; node . id = testnames ? testnames [ nodes ] : mod + ( nodes + 1 ) ; div . appendChild ( node ) ; } } style = createElement ( 'style' ) ; style . type = 'text/css' ; style . id = 's' + mod ; // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody. // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270 ( ! body . fake ? div : body ) . appendChild ( style ) ; body . appendChild ( div ) ; if ( style . styleSheet ) { style . styleSheet . cssText = rule ; } else { style . appendChild ( document . createTextNode ( rule ) ) ; } div . id = mod ; if ( body . fake ) { //avoid crashing IE8, if background image is used body . style . background = '' ; //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible body . style . overflow = 'hidden' ; docOverflow = docElement . style . overflow ; docElement . style . overflow = 'hidden' ; docElement . appendChild ( body ) ; } ret = callback ( div , rule ) ; // If this is done after page load we don't want to remove the body so check if body exists if ( body . fake ) { body . parentNode . removeChild ( body ) ; docElement . style . overflow = docOverflow ; // Trigger layout so kinetic scrolling isn't disabled in iOS6+ docElement . offsetHeight ; } else { div . parentNode . removeChild ( div ) ; } return ! ! ret ; }
injectElementWithStyles injects an element with style element and some CSS rules

@access private
@function injectElementWithStyles
@param {string} rule - String representing a css rule
@param {function} callback - A function that is used to test the injected element
@param {number} [nodes] - An integer representing the number of additional nodes you want injected
@param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes
@returns {boolean}
injectElementWithStyles injects an element with style element and some CSS rules