Ich kann keine Antwort von meinem Inhaltsskript erhalten, um in meinem popup.html zu erscheinen. Wenn dieser Code ausgeführt wird und auf die Schaltfläche Suchen geklickt wird, "Hallo von Antwort!" druckt, aber die variable Antwort wird als undefiniert gedruckt. Das ultimative Ziel ist es, das DOM des aktuellen Tabs in meine Skriptdatei zu bekommen, damit ich es analysieren kann. Ich verwende eine einmalige Nachricht an ein Inhaltsskript, um das DOM zu erhalten, aber es wird nicht zurückgegeben und wird als undefiniert angezeigt. Ich suche nach möglicher Hilfe. Vielen Dank.Nicht definierte Antwort vom Inhaltsskript in der Chrome-Erweiterung
popup.html:
<!DOCTYPE html>
<html>
<body>
<head>
<script src="script.js"></script>
</head>
<form >
Find: <input id="find" type="text"> </input>
</form>
<button id="find_button"> Find </button>
</body>
</html>
manifest.json:
{
"name": "Enhanced Find",
"version": "1.0",
"manifest_version": 2,
"description": "Ctrl+F, but better",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"tabs",
"*://*/*"
],
"background":{
"scripts": ["script.js"],
"persistent": true
},
"content_scripts":[
{
"matches": ["http://*/*", "https://*/*"],
"js": ["content_script.js"],
"run_at": "document_end"
}
]
}
script.js:
var bkg = chrome.extension.getBackgroundPage();
function eventHandler(){
var input = document.getElementById("find");
var text = input.value;
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
var tab = tabs[0];
var url = tab.url;
chrome.tabs.sendMessage(tab.id, {method: "getDocuments"}, function(response){
bkg.console.log("Hello from response!");
bkg.console.log(response);
});
});
}
content_script.js:
var bkg = chrome.extension.getBackgroundPage();
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
if(request.method == "getDOM"){
sendResponse({data : bkg.document});
}else{
sendResponse({});
}
});
Einige Bemerkungen für den Anfang: 1. Sie senden die Nachricht '{ Methode: "getDocuments"} ', aber horche nach' {method: "getDOM"} '. 2. Auch wenn die Nachrichten übereinstimmen würden, würden Sie das Dokument Ihrer Hintergrundseite zurücksenden. 3. Sie führen zwei separate Instanzen von 'script.js' aus: eine auf Ihrer Hintergrundseite und eine in Ihrem Popup. 4. Sie scheinen einige Begriffe (wie Hintergrundseite, Popup, Inhaltsskript) gerade zu erhalten. 5. Sie verwenden eine persistente Hintergrundseite, wenn eine Ereignisseite (nicht persistente Hintergrundseite) gleichermaßen effektiv, aber wesentlich "ressourcenschonender" wäre. – gkalpak
(Das heißt, ja, ich werde versuchen, bald eine tatsächliche Antwort zu finden :)) – gkalpak
Haben Sie meine vorgeschlagene Lösung unten versucht? Hat es für dich funktioniert? – gkalpak