Google chrome 覆盖Chrome存储API

Google chrome 覆盖Chrome存储API,google-chrome,google-chrome-extension,google-chrome-storage,Google Chrome,Google Chrome Extension,Google Chrome Storage,我想重写chrome.storage.local.set,以便在调用chrome存储API时记录存储密钥的值: var storage_local_set = chrome.storage.local.set; chrome.storage.local.set = function(key, value) { console.log(key); storage_local_set(key); } 但是我得到了非法调用:当调用storage\u local\u set(k

我想重写
chrome.storage.local.set
,以便在调用chrome存储API时记录存储密钥的值:

var storage_local_set = chrome.storage.local.set;
chrome.storage.local.set = function(key, value) {
    console.log(key);
    storage_local_set(key);    
}
但是我得到了
非法调用:当调用
storage\u local\u set(key)
时,必须对StorageArea类型的对象调用函数。记录密钥后如何存储数据

对于
chrome.storage.sync.set
这是我根据给出的解决方案尝试的:

const api = chrome.storage.sync;
const { set } = api; 
api.set = function (data, callback) {
  console.log(data);
  set.apply(api, arguments);  
};
但这并不是挂接API,您需要使用.call()或.apply()来提供此对象:

storage\u local\u set.apply(这是参数);
不过,覆盖中的参数与文档不匹配。如果要匹配文档,请执行以下操作:

constapi=chrome.storage.local;
const{set}=api;
api.set=函数(数据、回调){
控制台日志(数据);
set.apply(api、参数);
};
如果要将签名更改为单独的键和值:

constapi=chrome.storage.local;
const{set}=api;
api.set=(键、值、回调)=>{
console.log(键、值);
调用(api,{[key]:value},回调);
};

tnx。我也想对
chrome.storage.sync
做同样的事情,但它没有被钩住?因为我看不到你做了什么,我无能为力。你不能在同一范围内有两个同名的变量(
set
api
),所以你需要重命名第二个变量。我做了,但我仍然无法钩住api(当调用
chrome.storage.sync.set
时未设置任何内容,然后出现与此代码无关的其他错误。或者您错误地重命名了它们:-)顺便说一句,您可以通过使用
{
}
包围块来强制创建新块范围。