Javascript 唯一的选择是将该代码块包含到我的每个函数中?

Javascript 唯一的选择是将该代码块包含到我的每个函数中?,javascript,firefox,scope,universalxpconnect,Javascript,Firefox,Scope,Universalxpconnect,我的一些功能需要启用UniversalXPConnect特权 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 因此,我的函数如下所示: function oneOfMyFunctions() { netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); // ... } 实际上,当特权被

我的一些功能需要启用
UniversalXPConnect
特权

netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
因此,我的函数如下所示:

function oneOfMyFunctions() {
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

    // ...
}
实际上,当特权被拒绝时,我也
尝试
捕获
异常。情况如下:

try {
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

    // ...
} catch (e) {
    // ...
}
function oneOfMyFunctions() {
    if (enablePrivilege()) {
        // ...
    } else {
        // ...
    }
}
function enablePrivilege() {
    try {
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
    } catch (e) {
        return false;
    }

    return true;
}
我更愿意将其作为一个单独的函数,并从我的函数中调用它,如下所示:

try {
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

    // ...
} catch (e) {
    // ...
}
function oneOfMyFunctions() {
    if (enablePrivilege()) {
        // ...
    } else {
        // ...
    }
}
function enablePrivilege() {
    try {
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
    } catch (e) {
        return false;
    }

    return true;
}
假定
enablePrivilege
功能如下:

try {
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

    // ...
} catch (e) {
    // ...
}
function oneOfMyFunctions() {
    if (enablePrivilege()) {
        // ...
    } else {
        // ...
    }
}
function enablePrivilege() {
    try {
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
    } catch (e) {
        return false;
    }

    return true;
}
但是,出于安全原因,这是不可能的,因为特权只在请求函数的范围内授予

那么,唯一的选择就是将代码块包含到我的每个函数中

更新:

由于我还将
尝试
捕获
一些其他异常,因此我最终采用了以下设计:

function readFile(path, start, length) {
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

    var file = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath(path);

    var istream = Components.classes['@mozilla.org/network/file-input-stream;1'].createInstance(Components.interfaces.nsIFileInputStream);
    istream.init(file, -1, -1, false);

    istream.QueryInterface(Components.interfaces.nsISeekableStream);
    istream.seek(0, start);

    var bstream = Components.classes['@mozilla.org/binaryinputstream;1'].createInstance(Components.interfaces.nsIBinaryInputStream);
    bstream.setInputStream(istream);

    return bstream.readBytes(length);
}

var filepath = 'C:\\test.txt', start = 440, length = 5;

try {
    console.log(readFile(filepath, start, length));
} catch (e) {
    if (e.name == 'Error') console.log('The privilege to read the file is not granted.');
    else console.log('An error happened trying to read the file.');
}

您可以使enablePrivilege成为一种包装函数,它接受一个函数作为参数,然后在其内部调用,如下所示

function enablePrivilege(funcParam) {
    //enable privileges, in try-catch
    funcParam();
}
所以当你这样称呼它的时候

enablePrivilege(oneOfMyFunctions);

需要特权的函数应该拥有这些特权,因为它是在enablePrivilege的范围内调用的。

我强烈建议您考虑根本不使用enablePrivilege。它已被弃用,正在被删除。有趣的是。。。你能在上面注明的地方贴一个链接吗?那么替换的是什么呢?替换的是一个扩展名。我不确定这方面的文档记录得有多清楚,但即将发布的Firefox版本将在您使用enablePrivilege时发出警告,并且您不能再使用enablePrivilege执行跨站点XMLHttpRequest。在某些地方(例如)提到了这一点,但还有很多文档需要更新。我正在计划一些文件I/O功能,这些功能确实需要这种特权。而且,事实证明,它在未来可能不起作用。。。嗯,听到这个消息很难过。无论如何,谢谢你通知我!这是个好主意!谢谢