Я пытаюсь выполнить Принять снимок и получить объект FileEntry Object для плагина камеры Cordova. Я использую Кордову Visual Studio 2017 для проверки примера, выбрав "Имитировать в браузере"
Выполнение снимка выполняется, и изображение отображается в симуляторе, используя тот же imageUrl
, который передается плагину файлов Cordova в этом фрагменте кода:
function cameraSuccess(imageUri) {
window.resolveLocalFileSystemURL(imageUri, function () {
console.log('success')
}, function (error) {
console.log(error.message);
});
return imageUri;
}
Однако вызов функции resolveLocalFileSystemURL не выполняется со следующей ошибкой:
URI, предоставленный API, был искажен, или результирующий URL-адрес данных превышено ограничение длины URL-адресов для URL-адресов данных.
Что мне нужно сделать, чтобы это сработало?
ИЗМЕНИТЬ Я нашел эту инструкцию в разделе Chrome Quirks в документации плагина
Метод resolveLocalFileSystemURL требует, чтобы входящий URL-адрес имел префикс файловой системы. Например, параметр url для resolveLocalFileSystemURL должен быть в форме файловая система: файл:///persistent/somefile.txt в отличие от формы file:///persistent/somefile.txt в Android.
Итак, я изменил код на:
if (device.isVirtual) {
if (!window.isFilePluginReadyRaised) {
//added to check another potential Chrome quirk
//the alert wasn't never shown so I don't think it an issue
alert('!window.isFilePluginReadyRaised');
}
imageUri= 'filesystem:' + imageUri;
}
window.resolveLocalFileSystemURL(imageUri, function () {
console.log('success');
}, function (error) {
console.log(error.message);
});
Теперь сообщение об ошибке:
Было установлено, что определенные файлы небезопасны для доступа в веб-приложении или слишком много вызовов выполняется в файле ресурсы.
Еще одна особенность Chrome:
Для Chrome необходим параметр -allow-file-access-from-files для поддержки API через файл:///протокол.
Неясно, запускает ли в этот момент аргумент Cordova Simulate Chrome. Эта проблема была поднята раньше:
Кордова: запуск хрома с помощью -allow-file-access-from-files от VS 2017
Итак, возможно, решение состоит в том, чтобы заставить Кордову Имитировать "разрешить доступ к файлам из файлов"? Как я могу проверить эту гипотезу?
ИЗМЕНИТЬ
Один из способов проверить гипотезу - запустить симулятор из командной строки, как это предложено в комментарии в этом ответе. Вы можете запустить команду, набрав chrome://version/
в адресной строке после запуска симулятора. Я добавил флаги --allow-file-access-from-files
и --unlimited-quota-for-files
, но получил ту же самую ошибку безопасности