我正在尝试编写一个 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/