Fix CSP violations from Cloudflare Radar scan
Two duplicate <meta> CSP tags in index.html conflicted with the _headers HTTP header, and browsers enforce the intersection of all active policies. That blocked the profile photo, the inline nav- highlight script, and the Cloudflare Insights beacon. Consolidate to a single CSP in _headers, allow the actual external resources the page needs (ki5bhv.com image, cloudflareinsights.com beacon), and move the inline script/onerror handler into js/main.js so script-src no longer needs 'unsafe-inline'. Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
1 parent
5d6eae87bf
commit
c7a10ae719
3 files changed
+26
-23
No files matched your search
+23
@@ -0,0 +1,23 @@
|
||||
// Highlight active nav link on scroll
|
||||
const sections = document.querySelectorAll('section[id]');
|
||||
const links = document.querySelectorAll('nav a');
|
||||
|
||||
const observer = new IntersectionObserver(entries => {
|
||||
entries.forEach(e => {
|
||||
if (e.isIntersecting) {
|
||||
links.forEach(l => l.classList.remove('active'));
|
||||
const active = document.querySelector(`nav a[href="#${e.target.id}"]`);
|
||||
if (active) active.classList.add('active');
|
||||
}
|
||||
});
|
||||
}, { threshold: 0.3 });
|
||||
|
||||
sections.forEach(s => observer.observe(s));
|
||||
|
||||
// Hide the profile photo if it fails to load
|
||||
const profilePhoto = document.querySelector('.profile-photo');
|
||||
if (profilePhoto) {
|
||||
profilePhoto.addEventListener('error', () => {
|
||||
profilePhoto.style.display = 'none';
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user