getFontFaces
by denvdmj
CSS
@font-face {
font-family: foo;
src: url('bar.otf');
}
@font-face {
font-family: mono-coding;
src: local(PragmataPro Mono), local(PragmataPro), local(Iosevka), local(Consolas);
}
JavaScript
function getFonts () {
var o = {},
sheet = document.styleSheets,
rule = null,
i = sheet.length, j;
while ( 0 <= --i ) {
rule = sheet[i].rules || sheet[i].cssRules || [];
j = rule.length;
while ( 0 <= --j ) {
if ( rule[j].constructor.name === 'CSSFontFaceRule' ) {
o[ rule[j].style.fontFamily ] = rule[j].style.src;
};
}
}
return o;
}
const getFontFaces = () => {
const fmap = {};
for (let sheet of document.styleSheets) {
let cssRulesEntries;
// test on cors error
try {
cssRulesEntries = [].entries.call(sheet.cssRules);
} catch (e) {
continue;
}
for (let [index, rule] of cssRulesEntries) {
if (rule.type === CSSRule.FONT_FACE_RULE) {
const style = rule.style;
fmap[ style.fontFamily ] = style.src;
}
}
}
return fmap;
}
console.log( getFonts() );
console.log( getFontFaces() );