我正在使用Cordova的相机插件(cordova-plugin-camera)让用户拍摄新照片或从他们的库中选择一张 . 奇怪的是,当我从lib中选择一张照片时,它第一次正常工作 . 但是当我尝试再次做同样的事情,但是使用不同的照片时,会返回错误的照片 - 这与第一次尝试时相同 .
为了更清楚:
-
我按下按钮选择照片 - >我从lib中选择照片1 - >正确返回照片1
-
我再次按下相同的按钮 - >我从lib中选择照片2 - >再次返回照片1
如果我第三次做同样的事情,它会正确返回照片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;
});
作为补充,我说问题的 Headers 是iOS,因为我还没有机会在Android上测试 . 我不知道那里的行为是否也有问题 .
1 回答
我终于找到了错误行为的原因 . 实际上并不是插件返回错误的URL,而是浏览器(webview)从缓存中显示错误的图像 . 我认为插件对不同的图像(至少部分)使用相同的URI,这导致浏览器从某种缓存加载图像(我不确定它来自何处) .
我通过在显示URI之前向URI添加时间戳来解决了这个问题 . 它现在对我来说非常好 .