gpt4 book ai didi

javascript - chrome.storage不保存数据(chrome在定义之前就使用过)

转载 作者:行者123 更新时间:2023-12-03 03:43:42 25 4
gpt4 key购买 nike

我正在按照 YouTube 教程制作 Chrome 扩展。

这是 list 文件:

{
"manifest_version":2,
"name":"Budget Manager",
"version":"1.0",
"description":"This extension tracks your overall spendings.",
"icons":{
"128":"icon128.png",
"48":"icon48.png",
"16":"icon16.png"
},
"browser_action":{
"default_icon":"icon16.png",
"default_popup":"popup.html"
},
"permissions": [
"storage"
]
}

popup.html

<!DOCTYPE html>
<html>
<head>
<title>Budget Manager</title>
<script src="jquery-3.2.1.min.js">
</script>
<script src="popup.js">
</script>
</head>
<body>
<h1>Budget Manager</h1>
<h2>Total Spend: <span id="total">0</span></h2>
<h2>Limit: <span id="limit"></span></h2>
<h3>Enter Amount</h3>
<input type="text" id="amount"/>
<input type="submit" id="spendAmount" value="Spend">
</body>
</html>

popup.js

$(function() {   
chrome.storage.sync.get('total', function (budget) {
$('#total').text(budget.total);
});
$('#spendAmount').click(function() {
chrome.storage.sync.get('total', function (budget) {
var newTotal = 0;
if (budget.total) {
newTotal += parseInt(budget.total);
}

var amount = $('amount').val();
if(amount) {
newTotal += parseInt(amount);
}

chrome.storage.sync.set({'total': newTotal});

$('#total').text(newTotal);
$('#amount').val('');
});
});
});

我收到如下错误:
'chrome' 在定义之前就被使用了 --> chrome.storage.sync.get('total', function (budget) {
缺少“use strict”语句 --> chrome.storage.sync.get('total', function (budget) {
'$' 在定义之前就被使用了 --> $(function){

还有一个初学者问题。我们为什么要使用 chrome.storage?我的意思是,如果我们不必同步。为什么我不能只使用普通变量来存储数据。

最佳答案

首先,无错误

I am getting errors like:

'chrome' was used before it was defined -->
Missing 'use strict' statement -->
'$' was used before it was defined -->

这些是您的 IDE 的警告。在这种情况下它们是无害的(例如,您的 IDE 根本不知道 Chrome 或 jQuery API)并且与您的问题无关。如何修复(或静默)它们取决于 IDE。

请注意,您不应仅依赖它们;毕竟,浏览器是代码的最终“消费者”,拥有最终决定权。看看debugging tutorial了解扩展程序如何访问 Chrome 控制台以获取代码。

现在,错误

  1. 在 Chrome 扩展程序中使用 submit 控件没有意义;他们所实现的只是重新加载页面。请参阅this question作为规范来源,但 TL;DR 是使用输入类型 button

  2. 您的代码中有一个拼写错误:

    var amount = $('amount').val();

    这应该有#amount。遗憾的是,jQuery 在这里只是返回 undefined 而不是抛出可见的错误。

接下来,“为什么”

Chrome 扩展程序弹出窗口关闭后将无法继续存在;它不是简单地隐藏起来,直到您下次打开,而是每次都会重新打开。有点像刷新页面。所以 JS 状态不会存在 - 你不能将数据保存在那里并期望它下次仍然存在。

因此,您需要某种形式的存储来实现持久性(除非您愿意在弹出窗口关闭时重置所有内容)。 chrome.storage API 是“最原生”的选择 - 尽管在您的情况下使用 sync 可能有点过分,但您可以使用 local

了解各种存储 API 的优缺点非常重要。例如,sync只能存储少量数据,并且不能非常频繁地写入。这是a good overview .

关于javascript - chrome.storage不保存数据(chrome在定义之前就使用过),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45506100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com