javascript - 类型错误 : Illegal invocation on function alias

标签 javascript indexeddb

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

$(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)...
  
});

阅读其他帖子后,我尝试确保在 proxiedDBOpen 调用范围内将 this 设置为 window ( Function.prototype.bind 在第 3 行被调用,试图做到这一点),但这似乎没有帮助;我还尝试了 var request = function(name, version) {return proxiedDBOpen.apply(this,arguments);}('MyTestDatabase', 4);,这会在调用 proxiedDBOpen.apply

最佳答案

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

关于javascript - 类型错误 : Illegal invocation on function alias,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30876577/

相关文章:

javascript - 为什么我的文字没有改变颜色? (Javascript)

javascript - 正则表达式用值替换所有逗号

javascript - 在 ReactJS/Javascript Es6 中使用哈希声明变量

javascript - Safari 不支持indexedDB.databases()

javascript - Dexie/IndexedDB 移动隐私浏览错误 - 呃哦 : Missing API Error: IndexedDB API Not Available

javascript - JS IndexedDB 闭包/内部函数

javascript - IndexedDB 数据库列表

javascript - Script 标签将 Javascript 呈现为具有看似有效的 HTML 的文本

javascript - 每当 iframe 重新加载时需要回调

HTML5 IndexedDB、Web SQL 数据库和浏览器大战