Chrome depolama eşitleme giriş değeri

0

Soru

Ana değerimde girdi değerini almaya çalışıyorum.js (içerik senaryosu) ama bir şekilde sonuçlandırmak için mücadele ediyorum. Değeri pencerelerle kaydetmek için büyü yaptım.açılır penceremde aşağıda görebileceğiniz gibi onload yaklaşımı.js. Ama içerik senaryosuna ulaşamıyorum. Değeri içerik komut dosyamda "userInput" değişkeni olarak kullanmak istiyorum.

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!');
        });
    };
};

manifesto.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'"
}

ana.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');

Bu yüzden chrome'u kullanmam gerektiğinden eminim.depolama.bir şekilde olsun ama tam olarak anlayamıyorum.

1

En iyi cevabı

1

Kodunuz çağırıyor deals bir parametre bildirmediğiniz ve sonra kullanmaya çalıştığınız için değeri gerçekten iletmeden sonsuza dek yinelemeli olarak userinput değişkenin kapsamı dışında.

Promisify edebilirsiniz chrome.storage ve kullan await bunun gibi:

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

ur kodunu içerik komut dosyama kopyalarsam şunu alırım: Uncaught (in promise) TypeError: Error in invocation of storage.get(optional [string|array|object] keys, function callback): No matching signature.
exec85

Özür dilerim, ManifestV2 kullanıyorsunuz, güncellenmiş cevaba bakın.
wOxxOm

olabilir ne demek TEŞEKKÜR yeterli.... işe yarıyor: -) sabrınız için teşekkürler! Sadece JS öğreniyorum ve bir chrome uzantı projesiyle öğrenmeye çalışıyorum ve bu bana çok fazla baş ağrısı verdi...
exec85

Diğer dillerde

Bu sayfa diğer dillerde

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