Chrome.tabs.executeScript (): Comment obtenir le résultat du script de contenu?

Selon la documentation de chrome.tabs.executeScript ( MDN ), la fonction de rappel accepte un résultat de "tableau de résultats" résultant de l'exécution du (s) script (s). Comment utilisez-vous cela pour obtenir des résultats? Toutes mes tentatives se terminent par la undefined définition d' undefined passeport vers le rappel.

J'ai essayé de retourner une valeur à la fin de mon script de contenu, qui a lancé une Uncaught SyntaxError: Illegal return statement . J'ai essayé d'utiliser l'argument d'objet code facultatif {code: "return "Hello";} sans succès.

Je pense que je ne comprends pas ce que l'on entend par "Le résultat du script dans chaque cadre injecté", dans la documentation.

    chrome.tabs.executeScript() renvoie la valeur de la dernière instruction évaluée, qui peut être la valeur renvoyée par une fonction (c'est-à-dire un IIFE). Généralement, ce sera la même chose que la console afficherait comme résultats de l'exécution (pas console.log() , mais les résultats) si vous avez exécuté le code / script à partir de la Console Web ( F12 ) (par exemple pour le script var foo='my result';foo; le tableau de results contiendra la chaîne " my result " en tant qu'élément). Si votre code est court, vous pouvez essayer de l'exécuter à partir de la console.

    Voici un exemple de code tiré d' une autre réponse à moi :

     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]); } 

    Cela injectera un script de contenu pour obtenir le .innerText du <body> lorsque le bouton d'action du navigateur est cliqué. Vous aurez besoin de l'autorisation activeTab .

    À titre d'exemple de ce que cela produit, vous pouvez ouvrir la console de la page Web ( F12 ) et saisir document.body.innerText; Ou (function (){return document.body.innerText;})(); Pour voir ce qui sera retourné.