chrome.- Laufzeit.sendMessage funktioniert nicht wie erwartet
Schreibe ich ein Chrome-plugin mit einem content-Skript und ein hintergrund-script, und ich bin versucht, um die beiden kommunizieren.
In meinem content-Skript, das ich Tue,
chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
console.log(response.farewell);
});
und in meinem hintergrund-script, ich mache
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if (request.greeting == "hello")
sendResponse({farewell: "goodbye"});
}
);
Mein manifest sieht wie folgt aus:
{
"manifest_version": 2,
"name": "Tesing Phase",
"version": "1.0",
"background": {
"persistent": false,
"scripts": ["bgscript.js"]
},
"content_scripts": [{
"js": ["contentscript.js"],
"all_frames": true,
"run_at" : "document_start",
"matches": ["*://*/*"]
}],
"web_accessible_resources": ["script.js"]
}
Wenn ich mein plugin, bekomme ich die folgende Fehlermeldung:
Uncaught TypeError: Object #<Object> has no method 'sendMessage'
Ich versuchte die Protokollierung chrome.runtime
und es gab keine Methode sendMessage
. Ich bin mit version 25.0 Chrom auf Ubuntu. Ich habe versucht, mit sendRequest
als gut, aber es sagte, es ist abgeschrieben und sendMessage
verwendet werden soll.
Kann jemand Punkt mich aus, was ich hier vermisst? Gibt es irgendwelche Berechtigungen, die erforderlich für diese zu arbeiten?
InformationsquelleAutor der Frage Jiby Jose | 2013-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
chrome.- Laufzeit.sendMessage
/onMessage
(und anderen damit verbundenen Veranstaltungen/Methoden wieconnect
) eingeführt wurden, in Chrom 26.Wenn Sie möchten, schreiben Sie eine Erweiterung, die kompatibel mit Chrome 20 - 25,
chrome.extension.sendMessage
.Einen Weg, um eine optimale Kompatibilität zu definieren
chrome.runtime
Methoden selbst. Führen Sie beispielsweise den folgenden code, bevor der rest des Codes (hintergrund/Inhalt Skript):Dann können Sie einfach die neuesten API-format:
Wenn du dich unwohl fühlst mit der änderung der Methoden auf die
chrome.runtime
Objekt, können Sie mit den folgenden Ansatz statt:InformationsquelleAutor der Antwort Rob W