2013-07-19 25 views
1

我有內部存儲爲使用iframe來可視化這些文件的斑點和web應用程序的HTML文檔的IndexedDB的數據庫。主窗口的IndexedDB數據庫與iframe內容的不同?

我的問題是:我想要獲取數據庫的存儲位置,每次點擊html文檔中顯示的iframe內部鏈接時,html文檔都存儲在該文檔中,但是當我嘗試時它會拋出異常。當我不在iframe的「內部」(該函數位於iframe中的超鏈接綁定的eventListener內部)時,它沒有任何問題。

使用的功能是:

function getObjectStore(store_name, mode) { 
    var tx = db.transaction(store_name, mode); // mode in this case is 'readonly' 
    return tx.objectStore(store_name); // line where the exception is thrown when "inside the iframe" 
} 

其中db是我的數據庫。拋出的異常是:

異常......「嘗試並沒有讓基因突變數據庫上的突變操作。」代碼:「11」 nsresult:「0x80660006(InvalidStateError)」

因爲一切都與其他案件,我沒有看到讓我的商店的步驟中的任何問題都行,我想知道如果我有這個問題是因爲我無法到達主窗口的數據庫,即使主頁面和iframe中的頁面來自我的本地服務器,或者是因爲其他原因。

謝謝您的諮詢!

+0

消息建議您在只讀事務中使用寫入運算。您顯示的代碼無助於查看問題。 iframe應該沒問題。使用chrome開發工具來調試iframe代碼。 –

+0

我不明白的是爲什麼當我只請求objectStore時使用了寫入操作?在調用函數中,我只做'var store = getObjectStore(DB_STORE_NAME,'readonly');'並且它是引發異常的這一行。因此,我試圖瞭解問題所在,但也可能由於安全風險而被阻止,如Kristof Degrave所說。我期望一個更適合上下文的異常消息。 –

+0

我嘗試了「讀寫」模式,並沒有任何改變,該消息保持不變... –

回答

0

IndexedDB的不裏面的iframe申安全隱患運行。

youbare談論意味着您要使用只讀交易對象存儲添加,編輯或刪除數據的異常。如果你想操縱數據使用一個讀寫事務。

+0

我認爲這只是在使用數據從其他領域...因此,對於任何類型的數據,indexedDB不會在iframe中運行?如果我使用對象元素而不是iframe,由於安全風險會不會阻塞? –

+0

由於可以將其加載到其他域中,所以不允許使用相同的原點框架和iframe。並非所有瀏覽器都能正確實施。我相信它可以使用鉻 –