Google chrome 如何从chrome扩展访问IndexedDB(当前打开的域/选项卡)

Google chrome 如何从chrome扩展访问IndexedDB(当前打开的域/选项卡),google-chrome,google-chrome-extension,indexeddb,Google Chrome,Google Chrome Extension,Indexeddb,我目前在google.com域名上有indexedDB。我希望能够从谷歌chrome扩展中读取它。我怎样才能做到这一点?我需要添加任何特定权限吗? 我目前有: "permissions": [ "tabs", "bookmarks", "unlimitedStorage", "*://*/*", "identity", "https://*.google.com/*", "https://ssl.gstatic.com/", "https://www.googleapis.com/", "htt

我目前在google.com域名上有indexedDB。我希望能够从谷歌chrome扩展中读取它。我怎样才能做到这一点?我需要添加任何特定权限吗? 我目前有:

"permissions": [ "tabs", "bookmarks", "unlimitedStorage", "*://*/*", "identity", "https://*.google.com/*", "https://ssl.gstatic.com/", "https://www.googleapis.com/", "https://accounts.google.com/" ],
用什么命令我可以做到这一点?谢谢大家!


编辑:我已经阅读了我可以从内容脚本访问它(只要带有域的选项卡是打开的-这是我的情况),但我不知道如何做…

对于仍然感兴趣的人,我的解决方案-

这被放置在扩展的内容脚本中-

 chrome.extension.onConnect.addListener(function(port) {
 if(port.name == "extension_request" ) {
  port.onMessage.addListener(function(msg) {
    if (msg.db) {
      window.indexedDB.webkitGetDatabaseNames().onsuccess = function(sender,args)
      {
        var r = sender.target.result;
        if(r.contains(msg.db)){
            var openRequest = indexedDB.open(msg.db);
            // your code
            port.postMessage({foo: bar}); // your result which you want to send        
        }
       }
    }
 }
}
这是为背景或弹出脚本-

 chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        var port = chrome.tabs.connect(tabs[0].id,{name: "extension_request"});
            port.postMessage({db: "database_name_example"}); // send database name
            port.onMessage.addListener(function(msg) {
              if (msg.foo ) {
               // do your stuff in extension
              }
           }
}

要访问当前选项卡的indexeddb,请将“activeTab”添加到manifest.json中的“permissions”标记,然后创建内容脚本,内容脚本将有助于访问indexeddb,因为它在网页上下文中运行,然后将创建的内容脚本添加到manifest.json文件中的“content_scripts”标记。 对于manifest.json中的Eg,添加以下内容:

"permissions": ["activeTab"],
  "content_scripts": [
  {
  "matches": ["add the domains of the webpages where content script needs to run"],
  "js": ["contentScript.js"]
  }
]
if (!("indexedDB" in window)) {
  alert("This browser doesn't support IndexedDB");
 } else {
  let indexdb = window.indexedDB.open("firebaseLocalStorageDb", 1);
  indexdb.onsuccess = function() {
  let db = indexdb.result;
  let transaction = db.transaction("firebaseLocalStorage", "readwrite");
  let storage = transaction.objectStore("firebaseLocalStorage");
  console.log(storage.getAll());
 };
}
有关匹配的更多信息,请查看此处: .

在内容脚本内部添加打开存储,然后在对象存储上执行事务,并在对象存储上执行查询。 对于内容脚本中的Eg,添加以下内容:

"permissions": ["activeTab"],
  "content_scripts": [
  {
  "matches": ["add the domains of the webpages where content script needs to run"],
  "js": ["contentScript.js"]
  }
]
if (!("indexedDB" in window)) {
  alert("This browser doesn't support IndexedDB");
 } else {
  let indexdb = window.indexedDB.open("firebaseLocalStorageDb", 1);
  indexdb.onsuccess = function() {
  let db = indexdb.result;
  let transaction = db.transaction("firebaseLocalStorage", "readwrite");
  let storage = transaction.objectStore("firebaseLocalStorage");
  console.log(storage.getAll());
 };
}
对上述代码的解释: 它访问窗口对象并打开版本为“1”的存储“firebaseLocalStorageDb”,然后在成功访问该对象后,它会查找结果并对存储中的objectstore“firebaseLocalStorage”执行事务。最后查询objectstore“storage”实例以获得所有键值对。
有关更多信息,请检查:

无需任何特殊要求。由于您在内容脚本中执行此操作,并且它们与页面位于同一域中,因此您可以访问indexedDB,因为它是一个普通脚本。