Некоторые из моих функций требуют включения привилегии 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;
}
Но по соображениям безопасности это невозможно, поскольку привилегия предоставляется только в рамках запрашивающей функции.
Таким образом, единственный вариант - включитьэтот блок кода в каждой из моих функций?
ОБНОВЛЕНИЕ:
Как я собираюсь также try
до catch
некоторые другие исключения, которые я закончилсо следующим дизайном:
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.');
}