HtmlToImage Chrome 64 SecurityError: не удалось прочитать свойство cssRules из CSSStyleSheet: нет доступа к правилам

Новое обновление безопасности Chrome 64, похоже, сломало библиотеки htmlToImage. Ни один из стилей не рассчитывается правильно и отображается так, как если бы стили вообще не применялись.

Кто-нибудь знает обходной путь / исправление? Нужно ли мне разместить свой CSS на сервере и разрешить CORS?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
743
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я только что исправил эту ошибку.

Разветвил библиотеку и сделал запрос на перенос. Пока он не будет объединен, вы можете использовать разветвленное репо: https://github.com/kmap-io/html-to-image

заменив цель html-to-image в вашем package.json на:

"html-to-image": "git+https://github.com/kmap-io/html-to-image.git"


О баге

Chrome жалуется (выдает ошибку) на попытку чтения несуществующего свойства. Firefox тоже жалуется, но выдает только предупреждение, а не ошибку. Исправление состоит в замене

if (sheet.cssRules) {
  ...

с участием

if (sheet.hasOwnProperty('cssRules')) {
  ...

Обратной стороны нет (например: когда cssRules существует на sheet, который является таблицей стилей, скрипт выполняет итерацию по правилам и добавляет их в документ, как и предполагалось).


Как исправить (пока он не будет объединен).

По какой-то причине простая замена репозитория библиотеки на вилку, в которой я зафиксировал изменение, не работает для этого пакета. Я попросил автора библиотеки добавить инструкции о том, как строить после запроса на вытягивание, поскольку они заявляют в readme запросы на вытягивание, и предложения приветствуются. А пока вот как применить исправление с помощью patch-package:

  • добавьте "prepare": "patch-package" в scripts, в package.json вашего проекта
  • npm i patch-package --save-dev
  • В node_modules/html-to-image/lib/embedWebFonts.js измените строку 7 с
try {

к

if (sheet.hasOwnProperty('cssRules')) try {
  • npx patch-package html-to-image

Если у вас есть сценарий развертывания, который создает ваш проект с нуля, вам необходимо применить исправления прямо перед вызовом npm run build (или аналогичного, в зависимости от вашего стека):

git apply --ignore-whitespace patches/*.patch

Вот об этом.

Когда исправление будет объединено, вам нужно будет запустить:

npx patch-package html-to-image --reverse

Я получаю сообщение об ошибке. Модуль не найден: не удается разрешить преобразование HTML в изображение. Есть предположения?

mcottingham 27.09.2018 23:32

@mcottingham Я получаю ту же ошибку. Мне не удалось найти способ правильно собрать модуль. Я попросил владельца модуля обновить их ридми о том, как это сделать. Однако я нашел, как применить изменение без разветвления, с модулем patch-package, и сейчас тестирую его. Я обновлю свой ответ после того, как заставлю его работать локально, со всеми необходимыми шагами.

tao 27.09.2018 23:34

@mcottingham, я обновил все шаги, которые я сделал, чтобы заставить его работать для меня.

tao 28.09.2018 17:24

Отлично, спасибо! Мне нужно изменить импорт с import htmlToImage from 'html-to-image' на import * as htmlToImage from 'html-to-image', и теперь он отлично работает!

mcottingham 05.10.2018 23:28

Другие вопросы по теме