0

だから私は今、Web 開発の世界に入るために、Chrome 拡張機能を開発しています。頭を抱えているように見えない問題に遭遇しました。現在、私の 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 によってここに投稿されました。コメント行を見るとわかるように、現在フォーカスされているウィンドウだけからタブを取得するか、すべてのウィンドウからタブを取得するかを決定できます。私の問題は、拡張機能がクロムに​​読み込まれ、アクティブに使用されている場合、この設定を動的に変更するにはどうすればよいですか? したがって、ユーザーがオプションに入り、すべてのウィンドウのみが必要であると言った場合、background.js にメッセージを渡して、「現在フォーカスされているウィンドウではなく、すべてのウィンドウ機能を使用してください」と言うことができます。ここでは、理想的には 2 つの別々の関数を使用する必要があることを理解しています。これは、その方法のサンプルにすぎません。ありがとうございます!

4

1 に答える 1

0

localstorage を使用して、任意のユーザー設定を保存できます。オプション ページとバックグラウンド ページは同じローカル ストレージを共有するため、オプション ページから設定を更新し、バックグラウンド ページから値にアクセスできます。

options.html

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

options.js

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

オプションページが読み込まれると、同様の関数を使用してチェックボックスの値を現在の値で更新できます。

background.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 に答える