我试图遵循Cordova Camera Plugin的Take a picture and get a FileEntry Object示例。我正在使用Cordova Simulate Visual Studio 2017通过选择"模拟浏览器"
来测试示例拍摄照片并在模拟器中显示图像,使用与此代码段中传递给Cordova Files插件相同的imageUrl
:
function cameraSuccess(imageUri) {
window.resolveLocalFileSystemURL(imageUri, function () {
console.log('success')
}, function (error) {
console.log(error.message);
});
return imageUri;
}
但是,对resolveLocalFileSystemURL的调用失败,并显示以下错误:
提供给API的URI格式不正确,或者生成的数据URL格式错误 超出了数据网址的网址长度限制。
我需要做些什么来实现这个目标?
修改 我在插件文档的Chrome Quirks部分找到了这条说明
resolveLocalFileSystemURL方法需要入站网址 文件系统前缀。例如,url参数为 resolveLocalFileSystemURL应该在表单中 filesystem:file:///persistent/somefile.txt而不是表单 Android中的文件:///persistent/somefile.txt。
所以我将代码更改为:
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's an issue
alert('!window.isFilePluginReadyRaised');
}
imageUri= 'filesystem:' + imageUri;
}
window.resolveLocalFileSystemURL(imageUri, function () {
console.log('success');
}, function (error) {
console.log(error.message);
});
现在错误信息是:
确定某些文件对于Web应用程序内的访问不安全,或者正在对文件进行过多调用 资源。
另一个Chrome怪癖是:
Chrome需要--allow-file-access-from-files运行参数才能支持 API通过file:/// protocol。
目前尚不清楚Cordova Simulate是否会使用此参数启动Chrome。之前已经提出过这个问题:
Cordova: Launching chrome with --allow-file-access-from-files from VS 2017
因此,或许解决方案是将Cordova Simulate转换为"允许文件访问文件" ?我该如何检验这个假设?
修改
测试假设的一种方法是按照this answer下的注释中的建议从命令行运行模拟器。启动模拟器后,您可以通过在地址栏中键入chrome://version/
来运行命令。我添加了标记--allow-file-access-from-files
和--unlimited-quota-for-files
,但出现了相同的安全错误