2016-06-20 7 views
0

Я использую javascript-библиотеку html2canvas, чтобы снимать снимок экрана несколько раз в секунду, но это значительно замедляет сеанс браузера. Функция библиотеки в основном принимает элемент DOM, проходит через него и воспроизводит его как элемент холста. Я хочу каждый раз передавать тело документа веб-работнику, где он будет отдельно выполнять функцию. Я понимаю, что у рабочих нет доступа к DOM, но есть ли способ, которым я могу сериализовать тело, чтобы успешно передать его как аргумент postMessage?Передача тела документа без его редактирования в веб-работнике

+1

Вы можете отправить тело как обычный HTML-текст. Но проблема в том, что у рабочих также нет доступа к элементу холста и методам рисования. Библиотека AFAIK, html2canvas использует SVG, который нарисован на холсте. –

ответ

1

можно ли каким-либо образом сериализировать тело, чтобы успешно передать его как аргумент 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 может не работать в веб-работнике.

+0

Спасибо! Я обязательно попробую это. –

+0

Можно ли сериализовать DOM? Все, включая html, inline css, скрипты в документе + любые скрипты/ссылки, добавленные на страницу? – hipkiss

+0

Вы можете сериализовать DOM, но не DOM-методы и любые функции, которые вы добавили. Поскольку html2canvas сильно зависит от методов холста, он не будет работать (легко). – Nick