我正在使用Cordova的相机插件(cordova-plugin-camera)让用户拍摄新照片或从他们的库中选择一张。奇怪的是,当我从lib中选择一张照片时,它第一次正常工作。但是当我尝试再次做同样的事情,但是使用不同的照片时,会返回错误的照片 - 这与第一次尝试时相同。
更清楚地说明:
如果我第三次做同样的事情,它会正确地返回照片2。
这是我的代码:
// get photo
$('#modal_crud').off('click', '.crud_template_image a.photo_take, .crud_template_image a.photo_select').on('click', '.crud_template_image a.photo_take, .crud_template_image a.photo_select', function() {
var source_type = Camera.PictureSourceType.SAVEDPHOTOALBUM;
if ($(this).hasClass('photo_take')) {
source_type = Camera.PictureSourceType.CAMERA;
}
navigator.camera.getPicture(
function(uri) {
$('.crud_container:visible').find('.crud_edit_image').css({
'background-image' : 'url(' + uri + ')'
});
$('.crud_container:visible').find('input.image_uri').val(uri);
},
function(message) {
app.ui.show_notification('error', app.ui.translate_string('There was an error selecting an image: %s', [ message ]), true, undefined, $('.crud_container:visible').find('.modal_notifications'));
},
{
quality: 100,
destinationType: Camera.DestinationType.FILE_URI,
sourceType: source_type,
targetHeight: 400,
targetWidth: 400
}
);
return false;
});
作为补充,我说问题的标题是iOS,因为我还没有机会在Android上测试。我不知道那里的行为是否也有缺陷。
答案 0 :(得分:3)
我终于找到了错误行为的原因。实际上并不是插件返回错误的URL,而是浏览器(webview)从缓存中显示错误的图像。我认为插件对不同的图像(至少部分)使用了相同的URI,这导致浏览器从某种缓存加载图像(我不确定它来自何处)。
我通过在显示URI之前向URI添加时间戳来解决了这个问题。它现在对我来说非常好。