0

所以我现在正在开发一个 chrome 扩展,以便了解 Web 开发的世界。我遇到了一个我似乎无法理解的问题。目前,我的 background.js 使用以下方法获取所有打开的窗口以及每个打开的选项卡:

function getAllOpenWindows(winData) {
  var tabs = [];
  for (var i in winData) {
    /*if (winData[i].focused === true) {*/
        var winTabs = winData[i].tabs;
        var totTabs = winTabs.length;
        for (var j=0; j<totTabs;j++) {
          tabs.push(winTabs[j].url);
        }
    /*}*/
  }
  console.log(tabs);
}

这实际上是由 bpatel在这里发布的。现在您可以看到注释行,它允许我决定是从当前焦点窗口还是从所有窗口中获取选项卡。我的问题是,一旦扩展程序已加载到 chrome 并被积极使用,我该如何动态更改此设置?因此,如果用户进入选项并说他们只想要所有窗口,我将能够向我的 background.js 传递一条消息,说“他们使用所有窗口功能而不是当前聚焦窗口”。我知道理想情况下应该在这里使用 2 个单独的函数,这只是一个如何完成的示例。万分感谢!

4

1 回答 1

0

您可以使用 localstorage 保存任何用户设置。选项页面和后台页面共享相同的本地存储,因此您可以从选项页面更新设置并从后台页面访问值。

选项.html

<input type="checkbox" id="windowType" value="All">Check all windows</input>
<input type="button" id="saveSettings" value="Save">Save</input>

选项.js

document.getElementById("saveSettings").onclick = save_settings;
function save_settings()
{
   var checkAll = document.getElementById("windowType").checked;
   localStorage.setItem("check_all_windows",checkAll);
}

您可以使用类似的函数来更新选项页面加载时使用当前值的复选框的值。

背景.js

function getAllOpenWindows(winData) {
  var tabs = [];
  for (var i in winData) {
    var checkAll = (localStorage.getItem("check_all_windows") == "true");
    if (checkAll || winData[i].focused === true) {
        var winTabs = winData[i].tabs;
        var totTabs = winTabs.length;
        for (var j=0; j<totTabs;j++) {
          tabs.push(winTabs[j].url);
        }
    }
  }
  console.log(tabs);
}

在 background.js 中,您可以从 localStorage 中获取相同键的值,并检查它是否设置为 true 或 false。请记住,localStorage 会将值存储为字符串,因此您需要将其与正确的字符串进行比较 - if("false") 将评估为 true。

于 2013-10-21T18:21:18.980 回答