28 lines
970 B
JavaScript
28 lines
970 B
JavaScript
// Body for playwright browser_evaluate: () => { ...this content... }
|
|||
|
|
// Loads axe-core 4.x from CDN (skips if already present), runs WCAG A/AA scan.
|
||
|
|
return (async () => {
|
||
|
|
if (!window.axe) {
|
||
|
|
await new Promise((resolve, reject) => {
|
||
|
|
const s = document.createElement('script');
|
||
|
|
s.src = 'https://cdn.jsdelivr.net/npm/axe-core@4.10.2/axe.min.js';
|
||
|
|
s.onload = resolve;
|
||
|
|
s.onerror = () => reject(new Error('axe failed to load'));
|
||
|
|
document.head.appendChild(s);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
const results = await window.axe.run(document, {
|
||
|
|
runOnly: { type: 'tag', values: ['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa', 'wcag22aa'] }
|
||
|
|
});
|
||
|
|
return {
|
||
|
|
url: location.pathname,
|
||
|
|
violationCount: results.violations.length,
|
||
|
|
violations: results.violations.map(v => ({
|
||
|
|
id: v.id,
|
||
|
|
impact: v.impact,
|
||
|
|
description: v.help,
|
||
|
|
nodes: v.nodes.length,
|
||
|
|
sampleTargets: v.nodes.slice(0, 3).map(n => n.target.join(' '))
|
||
|
|
}))
|
||
|
|
};
|
||
|
|
})();
|