У меня есть приложение React, которое загружается в родительский документ с помощью некоторого кода JavaScript, который:
- создает
<iframe>
элемент
- создает
<div>
- вставляет тег
<style>
в <head>
для стилизации вставленного <div>
Грубо говоря, это работает с использованием следующего:
// example.jsx
// Require the css using css-loader
const styles = require('../styles/example.css');
// Find the parent document
const doc = window.parent.document;
// Inject our stylesheet for the widget into the parent document's
// HEAD as a style tag
const css = styles.toString();
const style = doc.createElement('style');
style.type = 'text/css';
if (style.styleSheet) {
// This is required for IE8 and below.
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
doc.head.appendChild(style);
Используется css-loader
в нашей конфигурации Webpack, чтобы require().toString()
работал для динамической установки cssText
.
Хотя это работает, я не знаю, является ли это идеалом. И мы бы предпочли написать Sass и воспользоваться преимуществами @import
для добавления других CSS (например, перезагрузки) и получить преимущества других инструментов для Sass.
Есть ли лучший способ, с помощью которого мы можем достичь того же результата, если вставить текст <style>
в этот родительский документ, не жертвуя нашей способностью использовать инструменты, которые мы предпочитаем?