Html-react-parser: Что делать с атрибутами стиля! Important?

Созданный на 18 февр. 2021  ·  8Комментарии  ·  Источник: remarkablemark/html-react-parser

У меня неприятная ситуация, когда я иногда получаю html-теги из cms, которые включают встроенные стили с! Important в них. Мне нужно проанализировать их и отобразить в приложении React.

Я ничего не могу с этим поделать, и все стили, к которым прикреплен! Important, удаляются React.
Есть ли способ использовать html-react-parser для сохранения этих стилей, чтобы они оставались в теле?
Извините, если это не подходящее место, чтобы спросить об этом, не стесняйтесь закрыть эту проблему в этом случае.

Спасибо!

question

Все 8 Комментарий

@linkurzweg Возможно, вам не понадобится html-react-parser . Смотрите скрипку . Просто помните об уязвимости XSS, если вы используете опасноSetInnerHTML .

@remarkablemark Ах, я даже не подумал об
В моем случае нет реального риска для XSS, так что все должно быть в порядке.

Проблема в том, что мне все еще нужно запускать все через html-react-parser, потому что тело может содержать элементы, которые мне нужно заменить на какой-то компонент React. Только если у элемента есть атрибут стиля, я могу отобразить его как есть.
Есть ли способ преобразовать domNode обратно в строку при синтаксическом анализе?

Большое спасибо!

@linkurzweg Вы можете передать свой domNode в domToReact() и он отобразит его как элемент React. См. Примеры замены .

@remarkablemark Еще раз спасибо! Я знаю это, но не понимаю, как это могло бы помочь в моем случае?
Мне все равно нужно вернуть domNode в строку, которую я мог бы использовать с опасноSetInnerHTML, или я чего-то не получаю?

@linkurzweg Я не слежу за вашим вариантом использования. Можете ли вы привести пример с использованием CodeSandbox , JSFiddle или Repl.it ?

@remarkablemark см. скрипку здесь: https://jsfiddle.net/9bezs1rt/.
Итак, это примерно так: я получаю одну огромную строку со всем html в ней, которую нужно каким-то образом проанализировать (может содержать теги сценария, фреймы, встраиваемые в социальные сети и т. Д.). Мне нужно перебрать все узлы dom и обработать множество разных случаев.

Если к узлу dom прикреплены некоторые встроенные стили, я могу предположить, что мне не нужно заменять его каким-либо компонентом React, и я просто хочу передать его, включая стили, у которых есть! Important. И, к сожалению, они теряются.

@linkurzweg Спасибо за создание скрипки. Итак, причина, по которой стили не отображаются правильно, заключается в том, что встроенным стилям не требуется !important .

После удаления !important я сделал красную рамку. См. Обновленную скрипку .

@remarkablemark Конечно, глупый я! Могут быть некоторые другие теги стиля с! Important внутри строки html (все это очень беспорядочно), которые могут конфликтовать со встроенными стилями. Но я могу удалить! Important и там, так что все будет в порядке. : D Большое спасибо за то, что посмотрели на это и за вашу помощь!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги