browser-canvas-fingerprinting
Version:
A simple canvas fingerprinting implementation in browser with specific information used to generate fingerprint
37 lines (30 loc) • 1.21 kB
JavaScript
export function getFontsByCanvasMeasure() {
const fonts = [
'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New',
'Georgia', 'Impact', 'Times New Roman', 'Trebuchet MS',
'Verdana', 'Microsoft YaHei', 'SimSun', 'SimHei',
'KaiTi', 'FangSong', 'NSimSun', 'Hiragino Sans GB',
'PingFang SC', 'STHeiti', 'WenQuanYi Micro Hei',
'DejaVu Sans', 'Liberation Sans', 'Ubuntu', 'Helvetica'
];
const availableFonts = [];
const canvas = new OffscreenCanvas(100, 100) || document.createElement('canvas');
const context = canvas.getContext('2d');
// 基准测量
const baseText = 'mmmmmmmmmmlli';
context.font = '72px monospace';
const baseWidth = context.measureText(baseText).width;
// 测试每种字体
fonts.forEach(font => {
context.font = `72px "${font}", monospace`;
const width = context.measureText(baseText).width;
// 如果宽度与基准不同,说明字体可用
if (width !== baseWidth) {
availableFonts.push(font);
}
});
return availableFonts;
}
export default function getFonts() {
return getFontsByCanvasMeasure();
}