Ошибка при нажатие назад на браузере

1

Когда нажимаю кнопку назад на браузере у меня как будто слетают все стили пока не обновлю страницу



Тема default должно показывать как на скрине ниже )

Подскажите в чем проблема

21 комментарий

  • +3
    Леонид Вакуленко Леонид Вакуленко Webasyst 6 февраля 2015 14:06 #

    Эта ошибка исправлена в последней версии темы default приложения Сайт. Но ваша тема дизайна модифицирована, и поэтому исправление автоматически не применилось.

    Вам нужно скопировать файл waslidemenu/jquery.waslidemenu.min.js из стандартной темы default Сайта в используемую.

    • +1
      Влас Васильков Влас Васильков 13 февраля 2015 03:40 #

      Здравствуйте , не помогло . wa-apps/site/themes / default / waslidemenu взял от туда файл jquery.waslidemenu.min.js с чистой темы default и заменил в основном сайте все равно некорректно отображает при нажатие назад на браузере .


      • +2
        Леонид Вакуленко Леонид Вакуленко Webasyst 13 февраля 2015 04:01 #

        Уверены, что старый файл не застрял в кеше вашего браузера? Замените в index.html waslidemenu.css?v{$wa_theme_version} на waslidemenu.css?v{$wa_theme_version}2

        • +1
          Леонид Вакуленко Леонид Вакуленко Webasyst 13 февраля 2015 04:03 #

          То есть JS а не CSS, конечно. jquery.waslidemenu.min.js

          • +1
            Влас Васильков Влас Васильков 13 февраля 2015 07:54 #

            <script type="text/javascript" src="{$wa_theme_url}waslidemenu/jquery.waslidemenu.min.js?v{$wa_theme_version}2"></script>

            Все тоже самое , мне кажется что в чистой теме дефолт и в моей теме дефолт jquery.waslidemenu.min.js одинаковы я когда заменял файлы размеры файлов один в один были .

              • +1
                Влас Васильков Влас Васильков 13 февраля 2015 10:27 #

                Ну я заменил не помогло , у меня некорректно отображается только при нажатие назад на браузере .

                Все равно спасибо вам за старание , очень хорошая и отзывчивая подержка )




              • +1
                Влас Васильков Влас Васильков 15 февраля 2015 14:56 #

                А что эти файлы делают ? я удалял все файлы

                jquery.waslidemenu.min

                waslidemenu

                jquery.waslidemenu


                Они нечего на сайте не поменяли

                • +2
                  Леонид Вакуленко Леонид Вакуленко Webasyst 16 февраля 2015 04:01 #

                  Я не могу знать, как устроена ваша модифицированная тема дизайна. Давайте я расскажу, как устроена стандартная default.

                  Есть тема приложения Магазин. Она настраивается в разлеле "витрина" - "дизайн" приложения Магазин. В ней есть, например, файлы cart.html, category.html и default.shop.css. Оригинальные немодифицированные файлы находятся в каталоге wa-apps/shop/themes/default. Когда вы что-то меняете в теме дизайна, оригинальные файлы не меняются, а создаётся модифицированная копия, которая лежит в wa-data/public/shop/themes/default. Если создана такая копия, используется она. Создана копия или нет, написано в редакторе темы в разделе "дизайн".

                  Тема default приложения Магазин унаследована от темы default приложения Сайт. Это значит, что если нужного файла нету в теме Магазина, файл возьмётся из приложения Сайт. Тема настраивается в разделе "дизайн" приложения Сайт. Там есть, например, файлы index.html и default.css, которых в темах Магазина нету.

                  В приложении Сайт работает та же схема. Если тема модифицирована, она живёт в wa-data/public/site/themes. Если не модифицирована, живёт в wa-apps/site/themes.

                  Наконец, все браузеры кешируют картинки, скрипты и файлы стилей. Браузер может не сразу понять, что файл удалён на сервере, и использовать свою старую копию, не спрашивая сервер вообще. Лечится принудительной очисткой кеша браузера или изменением ссылки на файл. Достаточно в URL после '?' добавить что угодно, и для браузера это будет уже другой файл.

                  Я всё это сейчас рассказал, потому что это может быть связано с вашим случаем. Убедитесь, что вы редактируете, удаляете и заменяете именно то, что в реальности используется. Самый простой способ это проверить - открыть панель сетевой активности браузера (в хроме и ффоксе F12 - Сеть) и посмотреть, откуда физически загружается файл waslidemenu. И загружается ли вообще - может, из кеша берётся.

                  Наконец, отвечая на ваш вопрос. waslidemenu - это механизм для сдвигающегося меню в сайдбаре. Он утроен хитро и при переходе на соседний продукт или категорию не обновляет страницу целиком, а загружает кусок контента и подменяет в основном блоке. При нажатии "назад" в браузере баг был в том, что показывался только основной контент без обвязки. Что вы и наблюдаете.

                  • +1
                    Влас Васильков Влас Васильков 16 февраля 2015 04:37 #
                    Спасибо большое ,исправил ошибку . Читало с wa-data/public/site/themes/default/waslidemenu/waslidemenu.css?v2.1.0" Просто скачал файлы которые вы мне скинули и заменил папку waslidmenu.


                  • +1
                    Влас Васильков Влас Васильков 16 февраля 2015 04:38 #
                    Спасибо большое ,исправил ошибку . Читало с wa-data/public/site/themes/default/waslidemenu/waslidemenu.css?v2.1.0" Просто скачал файлы которые вы мне скинули и заменил папку waslidmenu.


                  • +1
                    Влас Васильков Влас Васильков 7 февраля 2015 07:37 #

                    спасибо

                  • +1
                    Влас Васильков Влас Васильков 16 февраля 2015 04:39 #

                    Исправил ошибку . Читало с wa-data/public/site/themes/default/waslidemenu/waslidemenu.css?v2.1.0" Просто скачал файлы которые вы мне скинули и заменил папку waslidemenu.


                    Спасибо большое .

                  • +1
                    Андрей Гущин Андрей Гущин 17 февраля 2015 04:24 #

                    Хорошо, давайте рассмотрим такую же проблему, только учтём что тема писалась полностью своя.

                    Тоесть есть готовый работающий сайт на полностью индивидуальной теме с такой же проблемой.

                    Можно решить прстоо подкючением нужных библиотек и скриптов?

                    • +1
                      Леонид Вакуленко Леонид Вакуленко Webasyst 17 февраля 2015 04:59 #

                      Та же у вас проблема или другая, не знаю. Но могу рассказать, как исправлялся конкретно этот баг в теме default.

                      Когда юзер кликает "назад", браузер смотрит на URL, сохранённый в истории. Потом смотрит в свой кеш и видит, что буквально только что загружал с этого URL'а контент. И показывает контент сразу, без обращения к серверу.

                      А контент в кеше сохранён без обвязки шаблона. Так получилось, потому что с одного и того же URL'а контент отдаётся в обвязке или без обвязки в зависимости от заголовка X-Requested-With: если там XMLHttpRequest, значит, это AJAX, и обвязку возвращать не надо.

                      Решение - чтобы в историю браузера сохранялся не тот же самый URL, с которого мы подгружаем данные по AJAX. В URL AJAX'а добавили лишний GET-параметр, и это решило проблему.

                      • +1
                        Андрей Гущин Андрей Гущин 18 февраля 2015 07:47 #

                        Тоесть, грубо говоря, мне нужно подклучить данный js в свою тему?

                        • +1
                          Леонид Вакуленко Леонид Вакуленко Webasyst 18 февраля 2015 08:36 #

                          Если вы не знаете, как работает JS в вашей теме, то я тем более не знаю.

                          • +1
                            Андрей Гущин Андрей Гущин 19 февраля 2015 01:26 #

                            Леонид, сам фильтр не затронут изменениями. Что нужно сделать чтобы после фильтрации продуктов в категории и переходе в карточку товара и потом нажатии кнопки назад отображалась страница полностью?

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

                          • +1
                            Андрей Гущин Андрей Гущин 19 февраля 2015 01:58 #

                            Вот кусок скрипта, как я понимаю отвечающий за формирование URL, он взят с темы дефолт. Что нужно в нем изменить, чтобы кнопка назад работала корректно?

                            var f = function () {


                            var ajax_form_callback = function (f) {

                            var fields = f.serializeArray();

                            var params = [];

                            for (var i = 0; i < fields.length; i++) {

                            if (fields[i].value !== '') {

                            params.push(fields[i].name + '=' + fields[i].value);

                            }

                            }

                            var url = '?' + params.join('&');

                            $(window).lazyLoad && $(window).lazyLoad('sleep');

                            $('#product-list').html('<img src="' + f.data('loading') + '">');

                            $.get(url, function(html) {

                            var tmp = $('<div></div>').html(html);

                            $('#product-list').html(tmp.find('#product-list').html());

                            if (!!(history.pushState && history.state !== undefined)) {

                            window.history.pushState({}, '', url);

                            }

                            $(window).lazyLoad && $(window).lazyLoad('reload');

                            });


                          • +2
                            Андрей Гущин Андрей Гущин 19 февраля 2015 02:12 #

                            Всё, проблема решена следущим образом:

                            в файле default.shop.js нашел кусок кода, отвечающий за фильтрацию товара и в нём, как я понял есть строчка, отвечающая за изменение урла в адресной строке при выборе параметра фильтрации и записи урла в историю браузера:

                            if (!!(history.pushState && history.state !== undefined)) {

                            window.history.pushState({}, '', url);

                            }

                            Решение заключаеться в том чтобы изменить таки ссылку но не нарушить фильтрацию. Я например добавил в конце просто еще 1 параметр "&filtered" :

                            if (!!(history.pushState && history.state !== undefined)) {

                            window.history.pushState({}, '', url + '&filtered');

                            }

                            Как писал Леонид, ссылка при нажатии кнопки назад грузиться не та, с которой была подгружена часть контента а другая - значит браузер грузит не с кеша а с сервера.


                            Добавить комментарий

                            Чтобы добавить комментарий, зарегистрируйтесь или войдите