chrome.tabs.executeScript (): come ottenere il risultato dello script di contenuto?

In base alla documentazione di chrome.tabs.executeScript ( MDN ), la funzione di callback accetta un set di risultati “array di qualsiasi risultato” dall’esecuzione degli script. Come usi esattamente questo per ottenere risultati? Tutti i miei tentativi finiscono con un undefined passato al callback.

Ho provato a restituire un valore alla fine del mio script di contenuto, che ha Uncaught SyntaxError: Illegal return statement . Ho provato a utilizzare l’argomento object codice opzionale {code: "return "Hello";} senza successo.

Mi sento come se non comprendessi cosa si intende per “Il risultato della sceneggiatura in ogni fotogramma iniettato”, nella documentazione.

chrome.tabs.executeScript() restituisce una matrice con “il risultato dello script” da ciascuna scheda / frame in cui viene eseguito lo script.

“Il risultato dello script” è il valore dell’ultima istruzione valutata, che può essere il valore restituito da una funzione (es. Un IIFE, usando un’istruzione return ). Generalmente, questa sarà la stessa cosa che la console mostrerebbe come risultato dell’esecuzione (non console.log() , ma i risultati) se si esegue il codice / script dalla console Web ( F12 ) (ad esempio per lo script var foo='my result';foo; la matrice dei results conterrà la stringa ” my result ” come elemento). Se il tuo codice è breve, puoi provare ad eseguirlo dalla console.

Ecco alcuni esempi di codice presi da un’altra mia risposta :

 chrome.browserAction.onClicked.addListener(function(tab) { console.log('Injecting content script(s)'); //On Firefox document.body.textContent is probably more appropriate chrome.tabs.executeScript(tab.id,{ code: 'document.body.innerText;' //If you had something somewhat more complex you can use an IIFE: //code: '(function (){return document.body.innerText;})();' //If your code was complex, you should store it in a // separate .js file, which you inject with the file: property. },receiveText); }); //tabs.executeScript() returns the results of the executed script // in an array of results, one entry per frame in which the script // was injected. function receiveText(resultsArray){ console.log(resultsArray[0]); } 

Questo inietterà uno script di contenuto per ottenere il .innerText del quando si fa clic sul pulsante di azione del browser. avrai bisogno del permesso di activeTab .

Come esempio di ciò che producono, puoi aprire la console della pagina web ( F12 ) e digitare document.body.innerText; o (function (){return document.body.innerText;})(); per vedere cosa verrà restituito.