我一直在尝试创建JavaScript,该JavaScript包含用于管理充当文件系统的IndexedDB数据库的功能;下面的代码段有助于防止数据库被其他客户端脚本以未经授权的方式修改,但是未捕获的“ TypeError:非法调用”异常在第16行引发​​。



$(document).ready(function(){
  var db;
  var proxiedDBOpen = indexedDB.open.bind(window);
  indexedDB.open = function(name, version) {
    if(name === 'MyTestDatabase')
    {
      console.error('Security error: Unauthorized filesystem access.');
      return;
    }
    else
    {
      return proxiedDBOpen.apply(window, arguments);
    }
  }

  var request = proxiedDBOpen('MyTestDatabase', 4); // Uncaught TypeError: Illegal invocation

  // Database management code follows (uses jQuery)...

});





阅读其他文章后,我尝试确保在对this的调用范围内将window设置为proxiedDBOpen(尝试在第3行调用Function.prototype.bind来执行此操作),但这似乎没有帮助;我还尝试了var request = function(name, version) {return proxiedDBOpen.apply(this, arguments);}('MyTestDatabase', 4);,它会在调用proxiedDBOpen.apply时导致相同的异常。

最佳答案

@levi的建议解决了我的问题(indexedDB.open期望this在其上下文中为indexedDB)。

10-07 16:40