Ich versuche, eine Nachricht an mein Inhaltsskript aus dem Hintergrund zu senden, zusammen mit der Menü-ID, die geklickt wurde (was jetzt perfekt funktioniert). Nachdem ich similair Fragen betrachtet habe, bin ich dem Führer von Google Developer auf Nachricht gefolgt gegangen here. aber es scheint nicht für mich zu arbeiten, da ich einen uncaught Event-Handler bekomme.Chrome-Plugin - Nachricht an Inhalt senden
Manifest
"permissions": [
"contextMenus",
"background",
"tabs",
"activeTab",
"storage",
"https://ajax.googleapis.com/"
],
"background": {
"persistent": false,
"scripts": ["scrippy.js"]
},
"content_scripts": [
{
"run_at": "document_end",
"matches": ["http://*/*", "https://*/*"],
"js": ["content.js"]
}
]
}
Hintergrund
// Create context menu type variable so that its easily changed for all of them
var type = ["editable"];
// Create context menu
// Parent item
var scrippyMenu = chrome.contextMenus.create({"id": "1", "title": "Scrippy", "contexts": type});
// Child 1
var menuChild1 = chrome.contextMenus.create({"id": "2", "title": "child1", "parentId": scrippyMenu, "contexts": type});
// Child 2
var menuChild2 = chrome.contextMenus.create(
{"id": "3", "title": "child2", "parentId": scrippyMenu, "contexts": type});
// sub child 1 of child 2
var menuChild3 = chrome.contextMenus.create(
{"id": "4", "title": "sub child", "parentId": menuChild2, "contexts": type});
// Create an on click event listener and send message to content.js
chrome.contextMenus.onClicked.addListener(function(info, tab) {
//check menu item being sent
console.log("Menu item ID: " + info.menuItemId + " was clicked");
//Send message to content.js with the current tab id and menuItemId clicked
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {menuId: info.menuItemId},
//On response from content.js log it to console.
function(response) {
if(response.gotIt == "Got it"){
console.log("Got it!");
}
});
});
});
Inhalt
//Listener waiting for messages
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.menuId : "from the extension");
//if message states menu id of 4 then send response back to background
if (request.menuID == "4")
sendResponse({gotIt: "Got it"});
});
Fehlermeldung
extensions::uncaught_exception_handler:8 Error in event handler for (unknown): TypeError: Cannot read property 'gotIt' of undefined
Dies ist ein zu einer vorherigen Frage nachgehen i here über Kontextmenü hatte. Ich habe eine neue Frage als Ergebnis der Antwort dort erstellt und Code hat sich genug geändert, dass ich denke, es ist das Beste, hier ein neues zu fragen.
Können Sie die genaue Fehlermeldung einfügen? – Xan
Hallo @Xan danke für deine Hilfe. Ich habe die genaue Fehlermeldung hinzugefügt und einen Screenshot gemacht, nur für den Hauptbeitrag. – Lmnoppy
Dies bedeutet wahrscheinlich, dass das Inhaltsskript nicht auf der aktiven Registerkarte zu hören ist. Wie wird es injiziert? Überprüfen Sie auch im Callback nach 'chrome.runtime.lastError'. – Xan