Как отключить кэширование в мобильном пользовательском интерфейсе jQuery

StackOverflow https://stackoverflow.com/questions/4660934

Вопрос

Пытался...

<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 просто кэширование. Должен быть лучший способ ... я что -то упускаю?

Спасибо,

Серье

Это было полезно?

Решение

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

Это код, который я нашел на Github Github Github.

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();
  };
});

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

Другие советы

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

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

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

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

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

Чтобы сохранить все ранее посещаемые страницы в DOM, установите опцию Domcache на плагине Page на True, например, это:

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

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

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

Вы также можете кэшировать страницу программно, как это:

pageContainerElement.page({ domCache: true });

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

Метод 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 попытается найти его.

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

Ответ Мартина должен быть правильным, на мой взгляд, но мобильный кэш jQuery первой страницей, несмотря ни на что. 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();
    }
});

Вот мое рабочее решение:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top