Я использую javascript-библиотеку html2canvas, чтобы снимать снимок экрана несколько раз в секунду, но это значительно замедляет сеанс браузера. Функция библиотеки в основном принимает элемент DOM, проходит через него и воспроизводит его как элемент холста. Я хочу каждый раз передавать тело документа веб-работнику, где он будет отдельно выполнять функцию. Я понимаю, что у рабочих нет доступа к DOM, но есть ли способ, которым я могу сериализовать тело, чтобы успешно передать его как аргумент postMessage?Передача тела документа без его редактирования в веб-работнике
ответ
можно ли каким-либо образом сериализировать тело, чтобы успешно передать его как аргумент postMessage?
Да, используя (например) outerHTML
var worker = new Worker("worker.js");
document.addEventListener("DOMContentLoaded", function(event) {
worker.postMessage(document.body.outerHTML);
});
и worker.js
self.onmessage = function(e) {
console.log('In worker', e.data);
};
Что можно увидеть на https://plnkr.co/edit/M0OoIEiarr0HsOiSANUs?p=preview
Однако как Томаш Zato указывает , html2canvas
может не работать в веб-работнике.
Спасибо! Я обязательно попробую это. –
Можно ли сериализовать DOM? Все, включая html, inline css, скрипты в документе + любые скрипты/ссылки, добавленные на страницу? – hipkiss
Вы можете сериализовать DOM, но не DOM-методы и любые функции, которые вы добавили. Поскольку html2canvas сильно зависит от методов холста, он не будет работать (легко). – Nick
Вы можете отправить тело как обычный HTML-текст. Но проблема в том, что у рабочих также нет доступа к элементу холста и методам рисования. Библиотека AFAIK, html2canvas использует SVG, который нарисован на холсте. –