TypeError:函数别名上的非法调用

时间:2015-06-16 19:33:32

标签: javascript indexeddb

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

$(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设置为proxiedDBOpenFunction.prototype.bind在第3行调用试图这样做),但这似乎没有帮助;我还尝试了var request = function(name, version) {return proxiedDBOpen.apply(this, arguments);}('MyTestDatabase', 4);,这会在调用proxiedDBOpen.apply时导致相同的异常。

1 个答案:

答案 0 :(得分:0)

@ levi的建议解决了我的问题(this期望indexedDB在其上下文中为(?:\s{2,}|\n)