Взятие снимка экрана с помощью JavaScript для хромовых расширений

Я сделал большой поиск относительно снимающего, используя JS, но ни один, кажется, не полезен. Некоторые говорят, что элементы управления ActiveX использования, который не удовлетворяет моей ситуации. Я надеялся сделать снимок с помощью JS и загрузить его сервер.

62
задан 16 February 2014 в 03:41

2 ответа

Если you’re в предприятии, Ваш IT мог бы установить политику DisableScreenshots на истинный. Можно проверить его путем входа chrome://политика и искать этот ключ.

1
ответ дан 31 October 2019 в 13:57

Вот другой подход, который работал на меня.
требования были следующие:
(a) получают снимок экрана в хромовом расширении
(b), снимок экрана должен иметь прозрачный фон
(c), снимок экрана должен быть передан к другому процессу (через HTTP)

В этом разделе, я представлю требование (b)
обращения фрагмента кода, которое Полезные ссылки:
хромовый хром api
отладчика расширений devtools домен отладчика протокола
можно хотеть начать читать код от последней функции attachToDebugger

function captureScreenshot(tabId) {

    logMsg(`{page}: captureScreenshot: status=aboutTo, tabId=${tabId}`);

    chrome.debugger.sendCommand(
        {tabId:tabId},
        "Page.captureScreenshot", 
        {format: "png", fromSurface: true},
        response => {
            if(chrome.runtime.lastError) {
                logMsg(`{back}: captureScreenshot: status=failed, tabId=${tabId}`);
            }
            else {
                var dataType = typeof(response.data);
                logMsg(`{back}: captureScreenshot: status=success, tabId=${tabId}, dataType=${dataType}`);
                saveScreenshotRemotely(response.data);
            }
        });

    logMsg(`{page}: captureScreenshot: status=commandSent, tabId=${tabId}`);
}

//---------------------------------------------------------------------------

function setColorlessBackground(tabId) {

    logMsg(`{back}: setColorlessBackground: status=aboutTo, tabId=${tabId}`);

    chrome.debugger.sendCommand(
        {tabId:tabId}, 
        "Emulation.setDefaultBackgroundColorOverride",
        {'color': {'r': 0, 'g': 0, 'b': 0, 'a': 0}},
        function () {
            logMsg(`{back}: setColorlessBackground: status=enabled, tabId=${tabId}`);
            captureScreenshot(tabId);
        });

    logMsg(`{back}: setColorlessBackground: status=commandSent, tabId=${tabId}`);
}

//---------------------------------------------------------------------------

function enableDTPage(tabId) {

    logMsg(`{back}: enableDTPage: status=aboutTo, tabId=${tabId}`);

    chrome.debugger.sendCommand(
        {tabId:tabId}, 
        "Page.enable", 
        {}, 
        function () {
            logMsg(`{back}: enableDTPage: status=enabled, tabId=${tabId}`);
            setColorlessBackground(tabId);
            /*
             * you can comment 
             * setColorlessBackground(tabId);
             * and invoke 
             * captureScreenshot(tabId);
             * directly if you are not interested in having a 
             * transparent background
             */
        });

    logMsg(`{back}: enableDTPage: status=commandSent, tabId=${tabId}`);
}

//---------------------------------------------------------------------------

function attachToDebugger(tabId) {
    chrome.debugger.attach(
        {tabId:tabId}, 
        g_devtools_protocol_version,
        () => {
            if (chrome.runtime.lastError) {
                alert(chrome.runtime.lastError.message);
                logMsg(`{back}: debugger attach failed: error=${chrome.runtime.lastError.message}`);
            }
            else {
                logMsg(`{back}: debugger attach success: tabId=${tabId}`);
                enableDTPage(tabId);
            }
        });
}
0
ответ дан 31 October 2019 в 13:57

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

Похожие вопросы: