科尔多瓦相机从iOS上的库中返回错误的照片

时间:2016-02-17 13:26:28

标签: ios cordova cordova-plugins

我正在使用Cordova的相机插件(cordova-plugin-camera)让用户拍摄新照片或从他们的库中选择一张。奇怪的是,当我从lib中选择一张照片时,它第一次正常工作。但是当我尝试再次做同样的事情,但是使用不同的照片时,会返回错误的照片 - 这与第一次尝试时相同。

更清楚地说明:

  1. 我按下按钮选择照片 - >我从lib中选择了照片1 - >正确返回照片
  2. 我再次按下同一个按钮 - >我从lib中选择了照片2 - >再次返回照片
  3. 如果我第三次做同样的事情,它会正确地返回照片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上测试。我不知道那里的行为是否也有缺陷。

1 个答案:

答案 0 :(得分:3)

我终于找到了错误行为的原因。实际上并不是插件返回错误的URL,而是浏览器(webview)从缓存中显示错误的图像。我认为插件对不同的图像(至少部分)使用了相同的URI,这导致浏览器从某种缓存加载图像(我不确定它来自何处)。

我通过在显示URI之前向URI添加时间戳来解决了这个问题。它现在对我来说非常好。