JSFiddle - React, Tailwind, and code Playground
HTML
<link rel="stylesheet" href="http://cdn.jsdelivr.net/animatecss/3.2.0/animate.min.css">
<link rel="stylesheet" href="http://cdn.jsdelivr.net/animatecss/3.2.0/nonexistent.min.css">
<b>Old <link> elements:</b>
<br>
<output id="old"></output> <b>New <link> elements (after CSSback parsed them):</b>
<br>
<output id="new"></output>
CSS
body {
font-family:Arial;
}
li {
margin-left:5%;
}
JavaScript
console.clear();
CSSback = {
local: "cssfallback/",
fallbacks: {
"animate.min.css": "localanimate.css",
"nonexistent.min.css": "localnonexistent.css"
}
}
CSSback.init = function () {
var links = document.head.querySelectorAll("link");
for (var i = 0, l = links.length; i < l; i++) {
var link = links[i];
this.ping(link);
}
}.bind(CSSback);
CSSback.ping = function (link) {
var url = link.href;
var http = new XMLHttpRequest();
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status != 200) this.fallback(link);
}.bind(this);
http.open("head", url, true);
http.send();
}.bind(CSSback);
CSSback.fallback = function (link) {
var url = link.href.split("/");
var name = url[url.length - 1];
var fallback = this.fallbacks[name];
if (fallback) {
link.parentNode.removeChild(link);
var link = document.createElement("link");
link.rel = "stylesheet";
link.type = "text/css";
link.href = this.local + fallback;
document.head.appendChild(link);
}
}.bind(CSSback);
window.addEventListener("load", CSSback.init);
/* ---------- For log/debug purposes ( not needed ) */
window.addEventListener("load", function () {
old = document.getElementById("old");
var links = document.head.querySelectorAll("link");
old.innerHTML = "<ul>";
for (var i = 1, l = links.length; i < l; i++) {
old.innerHTML += "<li>" + links[i].outerHTML.replace("<", "<").replace(">", ">") + "</li>";
}
old.innerHTML += "</ul><br>";
});
setTimeout(function () {
New = document.getElementById("new");
New.innerHTML = "<ul>";
var links = document.head.querySelectorAll("link");
for (var i = 1, l = links.length; i < l; i++) {
New.innerHTML += "<li>" + links[i].outerHTML.replace("<", "<").replace(">", ">") + "</li>";
}
New.innerHTML += "</ul><br>";
}, 1000);