Я пытаюсь отправить сообщение из моего всплывающего 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 гласит: «Не удалось установить соединение. Получающий конец не существует».