javascript - 我正在尝试使用 chrome.storage.sync 和 chrome.tabs.create 传输用户输入的数据并将其用作 chrome.tabs api 的 url
问题描述
我正在尝试使用 chrome.storage.sync 和 chrome.tabs.create 来制作它,以便用户将某些网站放在选项菜单中,并在单击按钮时打开这些网站。
我遇到了麻烦,因为我不确定如何从 chrome.storage.syng.get 获取输入,并将其提供给 chrome.tabs.create,因为 chrome.tabs.create 正在请求 url 的字符串。对于这个问题的措辞多么糟糕,我深表歉意,但希望您可以通过我的代码理解。
背景脚本:
chrome.storage.sync.get('website1', function(website1){
chrome.tabs.create ({url: 'website1'})
});
chrome.storage.sync.get('website2', function(website2){
chrome.tabs.create ({url: 'website2'})
});
chrome.storage.sync.get('website3', function(website3){
chrome.tabs.create ({url: 'website3'})
});
在我在这里的这段代码中,它只是打开了一个选项卡,试图访问一个名为“website 3”的网站,因为它认为那是 url,但它应该代表用户输入的内容。我该如何输入代码,以便它将用户输入的内容作为 url 插入。
抱歉,这措辞令人困惑,我很难描述我的问题。
解决方案
回调接收一个对象,它的每个键对应于您请求的键。顺便说一句,您可以在一个电话中请求多个密钥:
chrome.storage.sync.get(['website1', 'website2', 'website3'], data => {
if (data.website1) chrome.tabs.create({url: data.website1});
if (data.website2) chrome.tabs.create({url: data.website2});
if (data.website3) chrome.tabs.create({url: data.website3});
});
您可以使用循环:
chrome.storage.sync.get(['website1', 'website2', 'website3'], data => {
for (const url of Object.values(data)) {
chrome.tabs.create({url});
}
});
同样,您可以在一次调用中存储多个密钥:
chrome.storage.sync.set({
website1: 'url1',
website2: 'url2',
website3: 'url3',
});
您可以在一个键下存储一组 URL:
chrome.storage.sync.set({
websites: ['url1', 'url2', 'url3'],
});
...并阅读它:
chrome.storage.sync.get('websites', data => {
for (const url of data.websites || []) {
chrome.tabs.create({url});
}
});
推荐阅读
- java - 如何调整 Sleuth 标头以使其与 OpenTracing 兼容
- javascript - React.js / Webpack 在每次构建后注入新的 main.js 文件
- javascript - 使用 Tampermonkey 选择下拉项创建无限循环
- javascript - 如何使用 EXTJS 4.2.1 解析 JSON 值并填充到组合框?
- orocommerce - Orocommerce 中可配置产品的分层定价
- python - 无法使用 pip 21.0.1 SSLEOFError 安装任何软件包
- android - 材质按钮切换组不可见
- github - Github Actions - 更新 Github 问题编号,然后运行作业
- python - 模块“darknet”没有属性“load_network”
- reactjs - 无法在`conditions`中使用useState Hooks“设置”