Hi, I’m trying to make an add-on for Firefox that will store some values which will be used later on in an contextMenus.
Getting the value and setting a new one in options_ui works just fine. The problem is when I try to get the value by using the new contextMenu I am adding in background.js. The new contextMenu it is added, the window for saving the file appers, but the value from storage returns undefined . Can anyone help me with this, point me where I’m doing something wrong?
I am setting a new value before using the contextMenu.
background.js
var gettingValue = browser.storage.sync.get("number");
gettingValue.then(item =>{
browser.contextMenus.create({
id: "save-image",
title: "Save image",
contexts: ["image"],
});
browser.contextMenus.onClicked.addListener((info, tab) => {
if (info.menuItemId === "save-image") {
let name = "Initial";
if(item) {
name = item.number;
} else {
name = "Number not found";
}
browser.downloads.download({
url : info.srcUrl,
filename : name + ".jpg",
saveAs : true
});
}
});
});
options.js
function saveOptions(e) {
e.preventDefault();
browser.storage.sync.set({
number: document.querySelector("#newNumber").value
});
}
function restoreOptions() {
let getting = browser.storage.sync.get("number");
getting.then(setCurrentChoice, onError);
function setCurrentChoice(result) {
document.querySelector("#newNumber").value = result.number || "No number was set";
}
function onError(error) {
console.log(`Error: ${error}`);
}
}
document.addEventListener("DOMContentLoaded", restoreOptions);
document.querySelector("form").addEventListener("submit", saveOptions);
options.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form>
<label>Number input: <input type="text" id="newNumber" ></label>
<button type="submit">Save</button>
</form>
<script src="options.js"></script>
</body>
</html>
Permissions in manifest
"permissions": [
"contextMenus",
"downloads",
"storage"
],