Ich versuche, Nachricht an Hintergrund zu senden, und auch zurück zum Inhaltsskript zu erhalten. chrome.runtime.onMessage.addListener ist im Inhaltsskript nicht definiert
Das ist mein content_script.js
init();
function init() {
function notifyBackgroundPage(event) {
chrome.runtime.sendMessage(chromeExtID, {
greeting: "Greeting from the content script"
});
}
window.addEventListener("click", notifyBackgroundPage);
// accept messages from background
// below line addListener is undefined
chrome.runtime.onMessage.addListener(function backgroundListener(request, sender, sendResponse) {
console.log("BgExt.js says: " + request);
});
}
BgExt.js
define([], function GmailExt() {
return {
start: function() {
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
console.log('inside response');
// to send back your response to the current tab
chrome.tabs.query({active: true, currentWindow: true}, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, {farewell: response}, function (response) {
});
});
return true;
}
);
}
};
});
Diese GmailExt Datei in all.js geladen wird (während alle .js wird in index.ht eingefügt ml)
require([
"base_host/chrome/Server",
"kernel/Kernel",
"hydra/version",
"base_host/chrome/StartupConfig",
"hydra/apps",
"dojo/_base/Deferred",
"talkto_util/common",
"dojo/i18n!base_host/nls/CommonStrings",
"base_host/chrome/BgExt",
"dojo/domReady!"
], function (Server, Kernel, version, StartupConfig, apps, Deferred, talktoUtil, nls, BgExt) {
document.getElementById("logoMessage").innerText = nls.simple_secure_text;
var host = new Server();
//if app and not extension
chrome.browserAction && chrome.browserAction.onClicked.addListener(function() {
Deferred.when(kernel.onInit(), function() {
host.appManager.showShell();
});
return true;
});
BgExt.start();
});
client_base/host/Chrom/index.html
<!DOCTYPE HTML>
<html>
<head>
<!-- Background Page for Extension/app -->
<title>Flock</title>
<meta charset="UTF-8">
<!--BUILD_REPLACE_BLOCK_START-->
<!-- This block will be remove by build.
All the files from libs/common/files.txt would be prepended to dojo.js -->
<script type="text/javascript" src="../../../hydra/src/libs/common/dojoConfig.js"></script>
<script type="text/javascript" src="../../../hydra/src/libs/common/underscore.js"></script>
<script type="text/javascript" src="../../../hydra/src/libs/common/underscore-ext.js"></script>
<!--BUILD_REPLACE_BLOCK_END-->
<script type="text/javascript" src="../../../hydra/src/libs/dojotoolkit/dojo/dojo.js"></script>
<script type="text/javascript" src="all.js"></script>
</head>
<body>
</body>
</html>
manifest.json
{
"manifest_version": 2,
"content_security_policy": "script-src 'self' 'unsafe-eval' https://j.maxmind.com https://ssl.google-analytics.com https://flock-apps.flock.co https://flock-apps.flock-staging.co https://flock-apps.flock.com https://flock-apps.flock-staging.com; object-src 'self'",
"minimum_chrome_version": "22",
"options_page": "client_base/host/chrome/static/crx_browser_actions/index.html?app=preferences",
"name": "__MSG_extName__",
"description": "__MSG_extDescription__",
"background": {
"page": "client_base/host/chrome/index.html",
"persistent": true
},
"browser_action": {
"default_popup": "/gmail_ext/popup.html"
},
"web_accessible_resources": [
"client_base/host/chrome/static/blank.gif",
"gmail_ext/icons.png",
"gmail_ext/jquery-3.2.1.min.js",
"gmail_ext/gmail.js",
"gmail_ext/content_script.js"
],
"permissions": [
"<all_urls>",
"unlimitedStorage",
"notifications",
"idle",
"background",
"tabs",
"activeTab"
],
"optional_permissions": [
"clipboardWrite"
],
"externally_connectable": {
"matches": [
"https://*.google.com/*",
"http://localhost/*",
]
},
"content_scripts": [
{
"matches": [
"*://mail.google.com/*"
],
"css": [
"/gmail_ext/content_script.css"
],
"js": [
"/gmail_ext/loader.js"
],
"run_at": "document_end"
}
],
"version": "1.0"
}
Die Konsole zeigt den Fehler in VM2279 auftritt, was bedeutet, dass der Code kein Inhaltsskript ist. Anscheinend injiziert etwas in Ihrem Skript den Code in ein Skriptelement, das im Seitenkontext ausgeführt wird - es ist kein Inhaltsskript mehr und hat daher keinen Zugriff auf chrome.runtime.onMessage. – wOxxOm
@wOxxOm Du hattest recht, aber das ist nur meine init-Funktion, die von meiner 'Refresh-Funktion' aufgerufen wird, nur um sicherzustellen, dass' init-Funktion' nur ausgeführt wird, nachdem alles AJAX fertig ist. – STEEL
Bitte bearbeiten Sie die Frage zum Thema: Fügen Sie ein [mcve] ein, das das Problem dupliziert. Bei Chrome-Erweiterungen oder Firefox-WebExtensions bedeutet dies fast immer, dass Sie * manifest.json * und einige der Hintergrund-, Inhalts- und/oder Popup-Skripts/HTML einbeziehen. Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht so, wie ich will?") Muss Folgendes enthalten: (1) das gewünschte Verhalten, (2) ein spezifisches Problem oder einen Fehler und (3) den kürzesten Code, der für die Reproduktion erforderlich ist * in der Frage selbst *. Bitte beachten Sie auch: [Was kann ich hier fragen?] (Http://stackoverflow.com/help/on-topic) und [fragen]. – Makyen