Я также столкнулся с той же проблемой и пришел к выводу, что это ошибка.После быстрого поиска я наткнулся на эту ветку:
https://github.com/niklasvh/html2canvas/issues/1593
... где пользователь (adamszeibert) указал ответственный код:
Я обнаружил, что в моем случае ошибка исходила от iframeLoader, определенного в https://github.com/niklasvh/html2canvas/blob/master/src/Clone.js около строки 572.
Я мог бы решить эту проблему, изменив код для возврата Promise.resolve (cloneIframeContainer);Я почти уверен, что это исправление ломает множество других вариантов использования, но для того, что мне нужно, оно решило проблему.
Решение 1:
На сегодняшний день существуетоткрытый запрос извлечения решения:
https://github.com/niklasvh/html2canvas/pull/1681
Решение 2:
Используйте метод runOutsideAngular из NgZone.
Шаг 1: Импорт NgZone из Angular Core:
import {NgZone} from '@angular/core';
Шаг 2: Добавление ngZone в конструктор компонента:
constructor(
...
...
private _ngZone: NgZone) {
...
}
Шаг 3: Инкапсулируйте ваш код html2canvas следующим образом:
public saveAsImage = () => {
this._ngZone.runOutsideAngular(() => {
html2canvas(document.getElementsByTagName('canvas')[0]).then(canvas => {
let a = document.createElement('a');
a.href = canvas.toDataURL("image/jpeg").replace("image/jpeg", "image/octet-stream");
a.download = 'Some Filename.jpg';
a.click();
});
});
};