Проблема с Jcrop в Chrome и IE8 - обрезка отображается только при обновлении страницы - PullRequest
0 голосов
/ 16 июня 2011

Я работаю над приложением Codeigniter, которое использует JCrop для обрезки изображения профиля пользователя.

После загрузки изображения я использую стандартный метод для запуска Jcrop и отправки координат через форму.

<script type="text/javascript">
    $(function() {
            $('#cropbox').Jcrop({
            onSelect: updateCoords,
            aspectRatio: 1,
            setSelect: [ 50, 50, 150, 150 ],
            bgColor: '#fff',
            bgOpacity: .2
        });
    });
    function updateCoords(c)
        {
            $('#x').val(c.x);
            $('#y').val(c.y);
            $('#w').val(c.w);
            $('#h').val(c.h);
        };
</script>

// some code here...

    <?php echo form_open('/profile/crop_picture', array('id' => 'crop_picture_form')); ?>

        <input type="hidden" name="x" id="x" />
        <input type="hidden" name="y" id="y" />
        <input type="hidden" name="w" id="w" />
        <input type="hidden" name="h" id="h" />
        <br />

    <?php echo form_close(); ?>

Все это прекрасно работает на Safari и FF 4.0.Пользователь выбирает область для обрезки, передает и страница обновляется с обрезанным изображением.

В Chrome и IE8, когда пользователь отправляет сообщение, страница обновляется, но изображение не обрезано.Кикер -> если в браузере нажать обновить, , то изображение обрезается .

Нет необходимости говорить, что это очень странно.У кого-нибудь есть предложения, с чего начать отладку этой проблемы - или вы видели, как это происходило / описано ранее?

Спасибо за помощь.

РЕДАКТИРОВАТЬ : Все еще не решено, нодальнейшее тестирование показывает, что это может быть проблема с кешем в Cr и IE8.Похоже, что Chrome сохраняет исходное загруженное изображение и отображает его, даже если размеры кадрирования были отправлены, обработаны и сохранены с помощью codeigniter на сервере.В конце моего контроллера CI для обрезки я поместил

redirect('/profile/picture', 'refresh');

, который не оказал влияния на Chrome и IE8, когда новая страница загружается после отправки обрезанного изображения.Обрезанное изображение отображается только в том случае, если я вручную запускаю «обновление» в браузере.

Я проверил файлы изображений на моем сервере, и это подтверждает это: хотя обрезанное изображение было сохранено на моем сервере, файл изображения (с тем жеимя), отображаемое в Chrome, имеет предыдущие не обрезанные размеры.

1 Ответ

0 голосов
/ 16 июня 2011

Это было решено путем изменения моего .htaccess, который содержал следующее

<IfModule mod_headers.c>
# 45 MIN
<FilesMatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$">
  Header set Cache-Control "max-age=2700"
</FilesMatch>
</IfModule>

Я удалил jpg|jpeg, и теперь все работает так, как должно в Cr и IE8.

Согласен, этодолжно было быть одним из первых мест для устранения неполадок, но любопытно, что FF и Saf, похоже, не подчиняются этому правилу так же, как Cr и IE8.В Saf и FF недавно отчеканенные обрезанные JPEG-файлы, даже имеющие то же имя файла, что и исходные JPEG-файлы, обновляются, несмотря на правило .htaccess.

Если у кого-то есть идеи о том, как сделать это поведение согласованным в браузерах, пожалуйста, оставьте комментарий.

...