Mozilla storageService: "不能执行语句:错误:Permission denied &q

Mozilla storageService: "Cannot execute statement :Error: Permission denied "

本文关键字:错误 Permission denied 语句 不能 storageService quot Mozilla 执行      更新时间:2023-09-26

(Mozilla: http://forums.mozillazine.org/viewtopic.php?f=7&t=2254955)

我正在尝试使用Mozilla storageService。在下面的代码中,用户被要求创建一个本地数据库('database.sqlite'),并创建一个表。

<html>
<head>
<script type="text/javascript">
var con=null;
function executeStatement()
    {
    try
        {
        var stmt=con.createStatement("SELECT * FROM instances");
        }
    catch(e)
        {
        alert("Cannot execute statement :"+e);
        }
    }
function init()
    {
    try
        {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        }
    catch (e)
        {
        alert("Permission to write to file was denied.");
        return;
        }
    try
        {
        var file = Components.classes["@mozilla.org/file/directory_service;1"]
                     .getService(Components.interfaces.nsIProperties)
                     .get("Home", Components.interfaces.nsIFile);
        file.append("database.sqlite");
        var storageService = Components.classes["@mozilla.org/storage/service;1"]
                        .getService(Components.interfaces.mozIStorageService);
        con = storageService.openDatabase(file);
        con.executeSimpleSQL(
            "CREATE TABLE IF NOT EXISTS instances("+
                "id INTEGER PRIMARY KEY AUTOINCREMENT"+
            ")"
            );
        }
    catch(e)
        {
        alert(e);
        }
    }

window.addEventListener("load", init,true); 
</script>
</head>
<body>
<button onClick="executeStatement();">Test</button>
</body>
</html>

但是当我单击按钮调用方法executeStatement时,我得到以下异常:

不能执行语句:错误:Permission denied for 来调用方法UnnamedClass.createStatement

为什么?

这就是enablePrivilege的工作原理-您必须在需要特权的每个函数中调用它。另见唯一的选择是将代码块包含到我的每个函数中?

说到这里,我将引用bz在该线程中的评论:

我强烈建议您考虑根本不使用enablePrivilege。它已被弃用,并正在被移除。——Boris Zbarsky 7月13日14:10

替换使用扩展名。我不确定这有多清楚的文档记录,但是即将到来的Firefox版本会在使用enablePrivilege时发出警告,并且您不能再使用enablePrivilege进行跨站点XMLHttpRequest。在一些地方(例如https://developer.mozilla.org/en/Mochitest#How_can_I_get_around_the_error_.22Permission_denied_to_get_property_XPCComponents.classes.22.3f)提到了这一点,但还有很多文档需要更新。——Boris Zbarsky july 14 at 5:11