gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:21:34 24 4
gpt4 key购买 nike

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

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

因此,我的函数如下所示:

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

// ...
}

实际上,我也try catch 特权被拒绝时的异常。看起来如下:

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

// ...
} catch (e) {
// ...
}

我宁愿让它成为一个单独的函数,并从我的函数中调用它,如下所示:

function oneOfMyFunctions() {
if (enablePrivilege()) {
// ...
} else {
// ...
}
}

假设 enablePrivilege 函数如下:

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 范围内调用的。

关于javascript - 唯一的选择是将该代码块包含到我的每个函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6677664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com