我在我的应用程序中使用AngularJS和IndexedDB。 GitHub上有一个非常好的工具,它包含一个用于IndexedDB的AngularJS模块。该库名为Angular-indexedDB,可用here。
当我尝试使用Firefox 31(最新版本)打开现有应用程序时,我遇到了问题。
当我打开控制台时,我看到以下消息:
TypeError: setting a property that has only a getter
知道如何解决这个问题吗?
答案 0 :(得分:1)
我已经使用AngularJS $窗口分叉了angular-indexedDB并实现了解决方案。我还发送了一个拉取请求,希望它很快会被整合。
我完全删除了使用全局命名空间的前两行。然后,我将实现移动到indexedDB提供程序的 $ get 函数。现在看来如下:
module.$get = ['$q', '$rootScope', '$window', function($q, $rootScope, $window) {
if(!('indexedDB' in $window)) {
$window.indexedDB = $window.mozIndexedDB || $window.webkitIndexedDB || $window.msIndexedDB;
}
var IDBKeyRange = $window.IDBKeyRange || $window.mozIDBKeyRange || $window.webkitIDBKeyRange || $window.msIDBKeyRange;
...
如果你看here,你可以找到完整的实现。只需用这个替换你现有的脚本,它就可以在Firefox 31中正常工作。
答案 1 :(得分:0)
要修复问题,我必须更改此库的代码(我将尽快发送拉取请求)。
要让它在Firefox中运行,请使用此JS file替换第9行:
if(!('indexedDB' in window)) {
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
}
修复很简单。如果indexedDB不在窗口中,则意味着我可以创建第一个。