Подтвердить что ты не робот

Как отключить кеширование в jQuery Mobile UI

Попробовал...

<div data-role="page" data-cache="30"> 
<div data-role="page" data-cache="never">
<div data-role="page" data-cache="false"> 
<div data-role="page" cache="false">

Кажется, что ничего не работает... поэтому на данный момент я исправляю проблему на стороне сервера через...

.'?x='.rand()
.'&x='.rand()

Я не хочу отключать AJAX только кеширование. Должен быть лучший способ, хотя... я что-то упустил?

Спасибо,

Сергей

4b9b3361

Ответ 1

Спасибо за ответы, ребята, и хотя они не совсем работали для меня, они указали мне в направлении поиска кода, который я искал.

Это код, который я нашел у этого джентльмена Гитуба Гиста.

https://gist.github.com/921920

jQuery('div').live('pagehide', function(event, ui){
  var page = jQuery(event.target);

  if(page.attr('data-cache') == 'never'){
    page.remove();
  };
});

В этом Gist есть код кнопки с обратной связью, но мне кажется, что он не нужен, потому что моя кнопка возврата работает нормально...

Ответ 2

Вы пытались перезаписать значение по умолчанию?

$(document).bind("mobileinit", function(){
    $.mobile.page.prototype.options.domCache = false;
});

Это работает для меня

Ответ 3

В jQM RC1 по умолчанию отключено кэширование. См. Выдержку ниже с сайта jQM о кешировании страниц: http://jquerymobile.com/demos/1.0rc1/docs/pages/page-cache.html

Если вы предпочитаете, вы можете сообщить jQuery Mobile о сохранении ранее посещаемых страниц в DOM вместо их удаления. Это позволяет вам кэшировать страницы, чтобы они были доступны мгновенно, если пользователь вернется к ним.

Чтобы сохранить все ранее посещаемые страницы в DOM, установите для параметра domCache на плагине страницы значение true, например:

$.mobile.page.prototype.options.domCache = true;

Кроме того, чтобы кэшировать только определенную страницу, вы можете добавить атрибут data-dom-cache = "true" в контейнер страницы:

<div data-role="page" id="cacheMe" data-dom-cache="true">

Вы также можете кэшировать страницу программно следующим образом:

pageContainerElement.page({ domCache: true });

Недостатком кэширования DOM является то, что DOM может стать очень большим, что приводит к замедлению и проблемам с памятью на некоторых устройствах. Если вы включите кеширование DOM, позаботьтесь о том, чтобы самостоятельно управлять DOM и тщательно протестировать его на нескольких устройствах.

Ответ 4

Метод 1

Это отключает AJAX

Читать http://jquerymobile.com/demos/1.0a2/#docs/api/globalconfig.html

Установите ajaxLinksEnabled в false, и он не будет загружать и кэшировать эти страницы, просто работать как обычные ссылки.

Метод 2

Вторая идея - удалить кешированные элементы. Вы можете привязываться к событию pagehide и вместо этого удалять страницу. Если в DOM нет, страница будет загружена снова.

Это можно сделать с помощью этого кода в качестве доказательства концепции:

$('.ui-page').live('pagehide',function(){ $(this).remove(); });

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

Также вы можете привязываться к событию с кнопкой или mousedown, получать его href, генерировать идентификатор страницы из него и находить div по id, чтобы удалить его, прежде чем jqm попытается найти его.

Я не нашел способ отключить кеш или принудительно загрузить.

Ответ 5

Ответ Мартина должен быть правильным, по моему мнению, но jQuery Mobile кэширует первую страницу независимо от того, что. https://github.com/jquery/jquery-mobile/issues/3249

Я решил "запланировать" поведение $.mobile.page.prototype.options.domCache = false и data-dom-cache="true"

$(document).on('pagehide', function (e) {
    var page = $(e.target);
    if (!$.mobile.page.prototype.options.domCache
        && (!page.attr('data-dom-cache')
            || page.attr('data-dom-cache') == "false")
        ) {
        page.remove();
    }
});

Ответ 6

Здесь мое рабочее решение:

$('.selector').live( 'pagebeforecreate', function () {
    $.mobile.urlHistory.stack = [];
    $.mobile.urlstack = [];
    $( '.ui-page' ).not( '.ui-page-active' ).remove();
});

Я написал (оригинал на немецком) статью об этой теме, может быть, это помогает. Ссылка на статью, переведенную Google