我一直在尝试创建 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/