Получение неопределенного объекта из обратного вызова сообщения - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь отправить сообщение из моего всплывающего javascript в мой контент-скрипт. Когда я пытаюсь прочитать свойство из обратного вызова, объект ответа всегда неопределен. Я новичок в Javascript, поэтому я не уверен, где моя ошибка. Мой код ниже.

popup.js

var elementPickerInjected = false;
var elementPickerRunning = false;
var button = document.getElementById("pickElement");

button.onclick = function() {
    if (!elementPickerInjected) {
        chrome.runtime.sendMessage("injectElementPicker");
    }

    var message = elementPickerRunning ? "stopElementPicker" : "runElementPicker";
    console.log(message);

    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        chrome.tabs.sendMessage(tabs[0].id, message, function(response) {
            //elementPickerRunning = response.running;
            alert(chrome.runtime.lastError.message);
        });
    });
}

elementPicker.js (скрипт содержимого)

$("body").wrap("<div class='grey_out'></div>");

screenDimmed = false;

var oldColor;
var oldElem = null;
var currentElem = null;

chrome.runtime.onMessage.addListener(
    function (message, sender, sendResponse) {
        if (message == "runElementPicker") {
            runElementPicker();
            sendResponse({running: true});
        } else if (message == "stopElementPicker") {
            stopElementPicker();
            sendResponse({running: false});
        }
    }
);

function runElementPicker() {
    dimScreen();
    document.addEventListener("mousemove", highlightElement(event));
}

function stopElementPicker() {
    undimScreen();
    document.removeEventListener("mousemove", highlightElement);
}

function highlightElement(event) {
    var x = event.clientX;
    var y = event.clientY;

    currentElem = document.elementFromPoint(x, y);
    if (currentElem != oldElem) {
        if (oldElem) {
            oldElem.style.backgroundColor = oldColor;
        }

        oldColor = currentElem.style.backgroundColor;
        oldElem = currentElem;

        currentElem.style.backgroundColor = "#FDFF47";
    }
}

function dimScreen() {
    $(".grey_out").css("display", "none");
    //$(".grey_out").css("display", "none");

    screenDimmed = true;
}

function undimScreen() {
    $(".grey_out").css("display", "block");

    screenDimmed = false;
}

manifest.json

{
    "name": "Image Gallery Viewer",
    "description": "This is a description",
    "version": "1.0",
    "manifest_version": 2,

    "background": {
      "scripts": ["background.js"],
      "persistent": false
    },

    "browser_action": {
        "default_popup": "popup.html",
        "default_icon": {                    
            "16": "images/icon16.png",               
            "32": "images/icon32.png"         
          },
        "default_title": "Start a gallery"
    },

    "permissions": [
        "activeTab",
        "<all_urls>",
        "debugger"
    ]
}

Когда я нажимаю кнопку «pickElement» в моем всплывающем окне, elementPicker.js получает сообщение, потому что экран тускнеет. Однако, когда я пытаюсь прочитать свойство «running» объекта ответа, который он отправляет обратно, я получаю сообщение об ошибке - «Ошибка в обработчике события для (неизвестно): TypeError: Невозможно прочитать свойство« running »из undefined». LastError.message гласит: «Не удалось установить соединение. Получающий конец не существует».

...