Urdunews.net |
/**
* JavaScript code to detect available availability of a
* particular font in a browser using JavaScript and CSS.
*
* Author : Lalit Patel
* Website: http://www.lalit.org/lab/jsoncookies
* License: Creative Commons Attribution-ShareAlike 2.5
* http://creativecommons.org/licenses/by-sa/2.5/
* Version: 0.15
* changed comparision font to serif from sans-serif,
* as in FF3.0 font of child element didn't fallback
* to parent element if the font is missing.
* Updated: 09 July 2009 10:52pm
*
*/
/**
* Actual function that does all the work. Returns an array with all the info.
* This test will fail for the font set as the default serif font.
*
* Usage: d = new Detector();
* d.test('font_name');
*/
var Detector = function(){
var h = document.getElementsByTagName("BODY")[0];
var d = document.createElement("DIV");
var s = document.createElement("SPAN");
d.appendChild(s);
d.style.fontFamily = "sans"; //font for the parent element DIV.
s.style.fontFamily = "sans"; //serif font used as a comparator.
s.style.fontSize = "72px"; //we test using 72px font size, we may use any size. I guess larger the better.
s.innerHTML = "mmmmmmmmmmlil"; //we use m or w because these two characters take up the maximum width. And we use a L so that the same matching fonts can get separated
h.appendChild(d);
var defaultWidth = s.offsetWidth; //now we have the defaultWidth
var defaultHeight = s.offsetHeight; //and the defaultHeight, we compare other fonts with these.
h.removeChild(d);
/* test
* params:
* font - name of the font you wish to detect
* return:
* f[0] - Input font name.
* f[1] - Computed width.
* f[2] - Computed height.
* f[3] - Detected? (true/false).
*/
function debug(font) {
h.appendChild(d);
var f = [];
f[0] = s.style.fontFamily = font; // Name of the font
f[1] = s.offsetWidth; // Width
f[2] = s.offsetHeight; // Height
h.removeChild(d);
font = font.toLowerCase();
//alert(navigator.appVersion);
//var myRegExp = /MSIE 7.0\/MSIE 8.0/;
//alert(navigator.appVersion);
var myRegExp = /MSIE 7.0/;
var matchPos1 = navigator.appVersion.search(myRegExp);
//if(matchPos1>0)
//{
defaultWidth=defaultWidth-10;
defaultHeight=defaultHeight-41;
// alert(defaultWidth);
// alert(defaultHeight);
//}
if (font == "serif") {
f[3] = true; // to set arial and sans-serif true
} else {
f[3] = (f[1] != defaultWidth || f[2] != defaultHeight); // Detected?
}
// alert(font);
// alert(f[0]);
// alert(defaultWidth);
// alert(f[1]);
// alert(defaultHeight);
// alert(f[1]);
// alert(f[3]);
// alert(navigator.appVersion);
// alert(f[1]+'-------'+defaultWidth+'----------'+f[2]+'-------------'+defaultHeight);
return f;
}
function test(font){
f = debug(font);
return f[3];
}
this.detailedTest = debug;
this.test = test;
}
0