Firefox 52 "Новый файл" изменения и ошибки

Я использую new File(file.path); в загруженном привилегированном коде от Firefox 17.* до 51.*.
file является nsIFile,

Начиная с Firefox 52, теперь он выдает ошибку: TypeError: Not enough arguments to File.

ссылка: Firefox 52 для разработчиков

API File and Directory Entries был обновлен и теперь содержит изменения в последней спецификации (подробности см. В сообщении об ошибке 1284987).

Что может быть примером правильного кода для использования сейчас для Firefox 52.*+?

Обновление по запросу:

// note: aFileURL is a local file
let aFileURL = 'file:///C:/Users/***/icon.png'; // just an example
let file = Services.io.newURI(aFileURL, null, null)
            .QueryInterface(Components.interfaces.nsIFileURL).file; // convert URL to nsIFile
file = new File(file.path); // Firefox 52: TypeError: Not enough arguments to File.

1 ответ

Благодаря Макьен

ссылка: Использование DOM File API в коде Chrome

MDN заявил: var file = File.createFromFileName("path/to/some/file");

Следующий код не работал: (мое недоразумение)

// Using text URL
Components.utils.importGlobalProperties(['File']);
let aFileURL = 'file:///C:/Users/***/icon.png'; // just an example
let file = File.createFromFileName(aFileURL);
// "File error: Unrecognized path"  nsresult: "0x80520001 (NS_ERROR_FILE_UNRECOGNIZED_PATH)"

Следующий код работает:

Components.utils.importGlobalProperties(['File']);
let aFileURL = 'file:///C:/Users/***/icon.png'; // just an example
let file = Services.io.newURI(aFileURL, null, null)
            .QueryInterface(Components.interfaces.nsIFileURL).file; // convert URL to nsIFile
file = File.createFromFileName(file.path);

Следующий код также работает:

Components.utils.importGlobalProperties(['File']);
let aFileURL = 'file:///C:/Users/***/icon.png'; // just an example
let file = Services.io.newURI(aFileURL, null, null)
            .QueryInterface(Components.interfaces.nsIFileURL).file; // convert URL to nsIFile
file = File.createFromNsIFile(file);

Дополнительная информация для справки:

С помощью file = new File([], file.path); производит следующее:

File { name: "C:\Users\...\icon.png", lastModified: 1487509240391, lastModifiedDate: Date 2017-02-19T13:00:40.391Z, webkitRelativePath: "", mozFullPath: "", size: 0, type: "" }

Однако, используя file = File.createFromFileName(file.path); производит следующее:

File { name: "icon.png", lastModified: 1403974172431, lastModifiedDate: Date 2014-06-28T16:49:32.431Z, webkitRelativePath: "", mozFullPath: "", size: 4294, type: "image/png" }

С помощью file = File.createFromNsIFile(file); производит следующее:

File { name: "icon.png", lastModified: 1403974172431, lastModifiedDate: Date 2014-06-28T16:49:32.431Z, webkitRelativePath: "", mozFullPath: "C:\Users\...\icon.png", size: 4294, type: "image/png" }

Проходя file от первого кода до FileReader() дает неправильный результат. "data:application/octet-stream;base64,"

Проходя file от 2-го и 3-го кода до FileReader() дает правильный результат."data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAQjUlEQVR42uWbB3QU17nHv7uzq60S6sJGotniARGYUCQcZAvkhh0QosZgXPJsHwgJpiTB4Aq4JrafwTHvkZeYBBt4EELAGAwGhABjwEYgcMExEk1CjSIJaXuZyXdHO8v..."

Другие вопросы по тегам