Google «Сообщить об ошибке» или «Инструмент обратной связи» позволяет выбрать область окна браузера, чтобы создать снимок экрана, который будет отправлен вместе с вашим отзывом об ошибке.
Снимок экрана Джейсона Смолла, размещенный в дублирующем вопросе .
Как они это делают? API обратной связи JavaScript Google загружается отсюда, и их обзор модуля обратной связи продемонстрирует возможность снимка экрана.
javascript
html
canvas
screenshot
joelvh
источник
источник
Ответы:
JavaScript может читать DOM и довольно точно отображать это, используя
canvas
. Я работал над сценарием, который преобразует HTML в изображение холста. Решил сегодня реализовать это в рассылке отзывов, как вы описали.Сценарий позволяет создавать формы обратной связи, которые включают в себя скриншот, созданный в браузере клиента, а также форму. Снимок экрана основан на DOM и, как таковой, может не быть на 100% точным к реальному представлению, поскольку он не создает фактического снимка экрана, а создает снимок экрана на основе информации, доступной на странице.
Она не требует какого - либо рендеринга с сервера , а все изображение создается в браузере клиента. Сам скрипт HTML2Canvas все еще находится в очень экспериментальном состоянии, так как он не анализирует почти столько атрибутов CSS3, сколько мне бы хотелось, ни поддерживает загрузку изображений CORS, даже если прокси-сервер был доступен.
Все еще довольно ограниченная совместимость браузера (не потому, что больше не может быть поддержано, просто не было времени, чтобы сделать его более кросс-браузерным).
Для получения дополнительной информации посмотрите примеры здесь:
http://hertzen.com/experiments/jsfeedback/
edit Сценарий html2canvas теперь доступен отдельно здесь и некоторые примеры здесь .
edit 2 Еще одно подтверждение того, что Google использует очень похожий метод (фактически, на основе документации, единственным существенным отличием является их асинхронный метод обхода / рисования), можно найти в этой презентации Эллиотта Спрена из команды Google Feedback: http: //www.elliottsprehn.com/preso/fluentconf/
источник
Ваше веб-приложение теперь может сделать «родной» скриншот всего рабочего стола клиента, используя
getUserMedia()
:Посмотрите на этот пример:
https://www.webrtc-experiment.com/Pluginfree-Screen-Sharing/
Клиент должен будет использовать Chrome (на данный момент) и должен будет включить поддержку захвата экрана в chrome: // flags.
источник
Navigator.getUserMedia()
устарела, но чуть ниже написано: «... Пожалуйста, используйте более новый navigator.mediaDevices.getUserMedia () », то есть он был просто заменен более новым API.Как упоминал Никлас, вы можете использовать библиотеку html2canvas, чтобы сделать скриншот с помощью JS в браузере. В этом пункте я расширю его ответ, приведя пример создания снимка экрана с помощью этой библиотеки:
Показать фрагмент кода
В
report()
функцииonrendered
после получения изображения в качестве URI данных вы можете показать его пользователю и позволить ему нарисовать «область ошибки» с помощью мыши, а затем отправить скриншот и координаты области на сервер.В этом примере
async/await
была сделана версия: с хорошейmakeScreenshot()
функцией .ОБНОВИТЬ
Простой пример, который позволяет вам сделать скриншот, выбрать регион, описать ошибку и отправить POST-запрос ( здесь jsfiddle ) (основная функция -
report()
).Показать фрагмент кода
источник
Получите снимок экрана как Canvas или Jpeg Blob / ArrayBuffer с помощью API getDisplayMedia :
DEMO:
источник
Вот пример использования: getDisplayMedia
Также стоит ознакомиться с документами по Screen Capture API .
источник