首页 > 解决方案 > 我正在尝试使用 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 插入。

抱歉,这措辞令人困惑,我很难描述我的问题。

标签: javascriptstringgoogle-chromegoogle-chrome-extension

解决方案


回调接收一个对象,它的每个键对应于您请求的键。顺便说一句,您可以在一个电话中请求多个密钥:

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

推荐阅读