Chrome de stockage la synchronisation de la valeur d'entrée

0

La question

J'essaie d'obtenir la valeur d'entrée dans mon main.js (le contenu du script) mais j'ai du mal à finialize en quelque sorte. Je m. maged pour enregistrer la valeur avec le windows.onload approche comme vous pouvez le voir ci-dessous dans mon popup.js. Mais je ne peux pas le faire sur le contenu du script. Je veux utiliser la valeur de la variable "userInput" dans le contenu de mon script.

popup.js:

function registerButtonAction(tabId, button, action) {
    // clicking button will send a message to
    // content script in the same tab as the popup
    button.addEventListener('click', () => chrome.tabs.sendMessage(tabId, { [action]: true }));
}

function setupButtons(tabId) {
    // add click actions to each 3 buttons
    registerButtonAction(tabId, document.getElementById('start-btn'), 'startSearch');
    registerButtonAction(tabId, document.getElementById('deals-btn'), 'startDeals');
    registerButtonAction(tabId, document.getElementById('stop-btn'), 'stopSearch');
}

function injectStartSearchScript() {
    chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
        // Injects JavaScript code into a page
        // chrome.tabs.executeScript(tabs[0].id, { file: 'main.js' });

        // add click handlers for buttons
        setupButtons(tabs[0].id);
    });
}

injectStartSearchScript();

window.onload = function () {
    document.getElementById('save-btn').onclick = function () {
        let valueInput = document.getElementById('deal-ipt').value;

        chrome.storage.sync.set({ 'maxBidDeal': valueInput }, function () {
            alert('Saved!');
        });
    };
};

le manifeste.json:

{
    "manifest_version": 2,
    "name": "test app",
    "description": "test desc",
    "version": "1.0",
    "browser_action": {
        "default_icon": "icon.png",
        "default_popup": "popup.html"
    },
    "permissions": ["tabs", "<all_urls>", "storage"],
    "content_scripts": [
        {
            "matches": ["<all_urls>"],
            "js": ["main.js"]
        }
    ],
    "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'"
}

main.js:

function startSearch() {
// does soemthing
}

function deals() {
// here is my variable userInput
userInput = 
}

chrome.runtime.onMessage.addListener((message) => {
    // choose action based on received message:
    if (message.startSearch) {
        startSearch();
    } else if (message.startDeals) {
        deals();
    }
});

// sanity check: content has loaded in the tab
console.log('content loaded');

Donc, je suis sûr que je dois utiliser google chrome.le stockage.obtenir en quelque sorte, mais je ne peux pas comprendre exactement.

1

La meilleure réponse

1

Votre code appelant deals de manière récursive, sans jamais réellement le passage de la valeur parce que vous n'avez pas à déclarer un paramètre, puis que vous essayez d'utiliser userinput au-delà de la variable du champ d'application.

Vous pouvez promisify chrome.storage et l'utilisation await comme ceci:

async function deals() {
  // Note that chrome.storage is already promisified in ManifestV3 since Chrome 95 
  let { MaxBidDeal } = await new Promise(resolve =>
    chrome.storage.sync.get('MaxBidDeal', resolve));

  // use MaxBidDeal right here
  console.log('MaxBidDeal', MaxBidDeal);
}
2021-10-25 19:38:39

si j'ai copier coller ur de code dans le contenu de mon script j'obtiens ceci: Uncaught (in promise) TypeError: Error in invocation of storage.get(optional [string|array|object] keys, function callback): No matching signature.
exec85

Ah, désolé, vous êtes à l'aide de ManifestV2, voir la mise à jour de réponse.
wOxxOm

ne peux pas dire MERCI assez.... il fonctionne :-) merci pour votre patience! Je suis juste de déblai JS et essayer d'apprendre avec une extension chrome projet et qui m'a donné tant de maux de tête...
exec85

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................