javascript - 如何在 chrome 扩展程序中保持选项卡的状态

标签 javascript tabs google-chrome-extension

我正在尝试编写一个 chrome 扩展,它需要保持脚本将在其中执行的每个选项卡的状态。 我的第一个想法是在后台页面中有一个 map ,将当前选项卡 ID 与选项卡状态相关联。

我刚刚看到 chome.tabs.getCurrent 方法不能用于获取执行内容脚本的页面的选项卡 ID。 我看到经常推荐使用 chrome.tabs.getSelected 方法,但我不能使用这种方法,因为我的脚本可以在后台调用(例如,当页面自动重新加载时)并且那么标签就不能被选中。

所以我应该知道如何获取当前选项卡的 ID 或如何保持选项卡的状态。

最佳答案

其实我只需要访问sender.tab.id

背景页面中的脚本:

var states = new Object();
chrome.extension.onRequest.addListener(
  function(request, sender, sendResponse) {
    if(request.method == "setState") {
      states[sender.tab.id] = request.state;
      sendResponse({});
    } else if(request.method == "getState") {
      var state = states[sender.tab.id];
      sendResponse(state);
    } else {
      sendResponse({}); // snub them.
    }
  });

以及内容脚本中我需要的代码:

function saveState(state) {
  chrome.extension.sendRequest({method: "setState", state: state}, function() {});
}

function restoreState() {
  chrome.extension.sendRequest({method: "getState"}, doTheJob);
}

function doTheJob(state) {
  // do the job
  console.log(state);

  var newState;
  if(state==undefined || state==null) {
    newState = { count: 1 };
  } else {
    newState = state;
    newState.count++;
  }
  saveState(newState);
}

restoreState();

关于javascript - 如何在 chrome 扩展程序中保持选项卡的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6744706/

相关文章:

javascript - Chrome 扩展程序中从内容脚本到后台页面的消息传递

javascript - 映射函数的预定义参数值。 JavaScript

javascript - 如何使用不在 url 中的 nightwatchjs 将基本身份验证传递到 selenium

javascript - 页面重新加载后保持事件选项卡时加载ajax内容(Bootstrap 4)

javascript - Uncaught ReferenceError : X is not defined

javascript - 如何在 iframe 中显示不安全的内容

javascript - JS 将变量与多级对象进行比较

javascript - DataTable createdRow 没有向行添加属性吗?

php - Woocommerce 产品选项卡的不同状态

java - Android Studio : Creating a Swipe Tab Application that Reads Fragments. 强制关闭