我一直在尝试创建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
设置为proxiedDBOpen
(Function.prototype.bind
在第3行调用试图这样做),但这似乎没有帮助;我还尝试了var request = function(name, version) {return proxiedDBOpen.apply(this, arguments);}('MyTestDatabase', 4);
,这会在调用proxiedDBOpen.apply
时导致相同的异常。
答案 0 :(得分:0)
@ levi的建议解决了我的问题(this
期望indexedDB
在其上下文中为(?:\s{2,}|\n)
。