Así que he estado leyendo que no puede acceder a cssRules para hojas de estilo externas porque se encuentra con problemas de política de CORS.
Decidí adoptar un enfoque diferente, pero sigo teniendo problemas.
Mi acercamiento:
link existente y agregue una nueva etiqueta que apunte a mi CDNdocument.styleSheetsLo que estoy tratando de averiguar es por qué sigo teniendo problemas si mi CDN permite el acceso desde cualquier origen.
export default () => { const payload = [...document.styleSheets].filter(s => s.href).map(s => s.href); axios.post('SOME ENDPOINT', { css: payload }).then(({ status, data: { data: newLinks } }) => { if (status === 200) { for (const i in newLinks) { document.querySelector(`link[href="${newLinks[i].source}"]`).remove() const stylesheet = document.createElement('link'); stylesheet.rel = 'stylesheet'; stylesheet.href = newLinks[i].downloaded; document.getElementsByTagName('head')[0].appendChild(stylesheet); } } }).then(() => { let delay = 250 setTimeout(() => { console.log('Stylesheets with Removed Links', [...document.styleSheets]); }, delay) }).then(() => { console.log([...document.styleSheets]) }) } Error en Safari SecurityError: Not allowed to access cross-origin stylesheet
He visto este enlace No puedo acceder a cssRules desde un archivo css local en Chrome 64
Resultado de la pestaña Red
Terminé encontrando una solución...
Todo gracias a Paulo Belo desde este enlace DOMException no detectada: no se pudo leer la propiedad 'cssRules'
stylesheet.crossOrigin = "anonymous" resolvió mi problema dándome acceso a cssRules.
https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin
Tenga en cuenta que esta solución no funciona con las hojas de estilo existentes que arrojan este error.
Exception: DOMException: Failed to read the 'cssRules' property from 'CSSStyleSheet': Cannot access rules at CSSStyleSheet.s
Esta solución solo funciona para sus propias hojas cargadas o, en mi caso, las de mi CDN.