2016-07-26 90 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 
       } 
      } 
} 
相關問題