2016-07-26 91 views
1

我目前在google.com域上有indexedDB。我希望能够从谷歌浏览器扩展中读取它。我怎么能做到这一点?我是否需要添加任何特定的权限? 我目前有:如何从Chrome扩展访问IndexedDB(当前打开的域/标签)

"permissions": [ "tabs", "bookmarks", "unlimitedStorage", "*://*/*", "identity", "https://*.google.com/*", "https://ssl.gstatic.com/", "https://www.googleapis.com/", "https://accounts.google.com/" ], 

什么命令我能做到这一点?谢谢!

编辑:我已经readed我可以从内容脚本访问它(aslong与域选项卡是开放的 - 这是我的情况),但我不知道该怎么做......

+2

没有特别要求。由于您在内容脚本中执行此操作,并且它们与页面位于同一个域中,因此您可以访问indexedDB,因为它是普通脚本。 https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB –

回答

0

对任何人来说仍有兴趣的,我解决了这个问题 -

这是摆在扩展的内容脚本 -

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 
       } 
      } 
} 
相关问题