Non riesco a ottenere una risposta dal mio script di contenuto per visualizzare nel mio popup.html. Quando viene eseguito questo codice e viene fatto clic sul pulsante Trova, "Ciao dalla risposta!" stampa, ma la risposta variabile viene stampata come indefinita. L'obiettivo finale è quello di ottenere il DOM della scheda corrente nel mio file di script in modo che io possa analizzarlo. Sto utilizzando un singolo messaggio per uno script di contenuto per ottenere il DOM, ma non viene restituito e viene visualizzato come non definito. Sto cercando qualsiasi aiuto possibile. Grazie.Risposta non definita dallo script di contenuto nell'estensione di cromo
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({});
}
});
alcune osservazioni per i principianti: 1. Si sta inviando il messaggio '{ metodo: "getDocuments"} ', ma ascolta' {method: "getDOM"} '. 2. Anche se i messaggi corrispondessero, si restituirebbe il documento della pagina di sfondo. 3. Stai eseguendo due istanze separate di 'script.js': una nella tua pagina di sfondo e una nel tuo popup. 4. Sembra che tu abbia bisogno di ottenere alcuni termini (come la pagina di sfondo, i popup, lo script dei contenuti) dritti. 5. Stai utilizzando una pagina di sfondo persistente, quando una pagina di eventi (pagina di background non persistente) sarebbe ugualmente efficace, ma significativamente più "a misura di risorse". – gkalpak
(Detto questo, sì, proverò a fornire una risposta effettiva a breve :)) – gkalpak
Hai provato la mia soluzione proposta di seguito? Ha funzionato per te ? – gkalpak