Los enlaces hash de jQuery Mobile se almacenan en caché después de hacer clic en el enlace por primera vez hasta shift + f5

Tengo un sitio web que usa la biblioteca jQuery Mobile y hay varios enlaces que se parecen a los siguientes:

<a href="#news?A">News for A zipcode</a>
<a href="#news?B">News for B</a>
<a href="#news?C">News for C</a>

Cualquier enlace en el que se haga clic primero parece ser almacenado en caché por el navegador para todos los enlaces posteriores que tienen el mismo #news prefijo. Ejemplo...

  1. El usuario hace clic en el segundo enlace para #news?B, el navegador va correctamente a #news?B
  2. El usuario hace clic en el botón Atrás y vuelve a casa
  3. El usuario hace clic en el primer enlace para #news?A, el navegador INcorrectamente va a #news?B (¿en caché del paso 1?)

Si vuelvo a hacer shift-f5, cualquier enlace en el que haga clic después se convierte en el enlace "almacenado" desde ese punto en adelante. ¿Algunas ideas? He probado esto tanto en mi teléfono como en Chrome con un conmutador de agente de usuario (para falsificar mi navegador y pensar que es un dispositivo móvil).

Editar - Creo que he encontrado la respuesta aquí, http://jquerymobile.com/test/docs/pages/page-dynamic.html. Probaré y verificaré antes de actualizar esta pregunta.

preguntado el 22 de mayo de 12 a las 15:05

¿Podrías publicar un poco más de código? -

Puede ver un ejemplo de trabajo aquí: seeitornot.co. Si cambia su agente de usuario a móvil y hace clic en la pestaña de horarios, luego especifica una ubicación, si elige diferentes cines, siempre verá el primer cine que eligió. -

¿Qué está manejando las plantillas? jQuery? Por cierto, me gusta este sitio -

jquerymobile.com es la biblioteca que estoy usando. ¡y gracias! siéntase libre de hacer clic en "Me gusta" de Facebook en la versión de escritorio;) -

2 Respuestas

Intenta usarlo así

<a href="#news_A">News for A zipcode</a>
<a href="#news_B">News for B</a>
<a href="#news_C">News for C</a>

Y también cambia el código a usar. _ en lugar de ? si lo está accediendo desde otro lugar

También puede usar Safari para probarlo para iPhone o iPad con más precisión que el conmutador UA de Chrome. Sin embargo, Chrome es bueno para las pruebas de Android. Tienes que ir a preferencias y habilitar el menú de desarrollador. En el menú del desarrollador, tendrá opciones para cambiar de agente de usuario.

contestado el 22 de mayo de 12 a las 15:05

Buena idea. Desafortunadamente, si el enlace hash tiene "#noticias" como prefijo, jquery mobile sabe mostrar el <div data-role="page" id="news">...</div> elemento. Si lo cambio a #news_A, jquery mobile intentará encontrar el div con id de news_A, que no existe. Podría probar enlaces como #news?zip=A en lugar de #news?A, por lo que el navegador reconoce ese par clave/valor en la cadena de consulta y no lo almacena en caché. - Ian Davis

Ok, encontré el problema, hash.ubicación no se está actualizando al enlace pulsado/pulsado (Teatro).

Usé el atributo data-url para extraer la información correcta:

Ejemplo:

$(document).on('pagechange', function (e, o) {
    var dataURL = $('#theater').attr('data-url'); // Use this for the Theater Location as hash is not updating
    var hash = location.hash;
    var action = hash.split('?')[0]; // #whatshot, #showtimes, #zip?{zip}, #theater?{zip},{theaterId}
    var args = dataURL.split('?')[1].split(',');
    var zip = args[0];
    var theaterId = args[1];

    // load theater movies
    codejkjk.movies.Api.GetTheaterMovies(codejkjk.movies.Mobile.Currents.ShowtimeDay(), codejkjk.movies.Mobile.Currents.ZipCode(), theaterId, function (theater) {
        codejkjk.movies.Mobile.Controls.CurrentTheater().html(theater.name);
        codejkjk.movies.Mobile.Controls.TheaterMovieList().html(
            codejkjk.movies.Mobile.Controls.TheaterMovieTemplate().render(theater)
        ).show().listview('refresh'); //.trigger('create');

        // set theaterMovieBackUrl
        theaterMovieBackUrl = hash; // set back url to current url

        $.mobile.hidePageLoadingMsg();
    });
});

Usé esta función en la consola de Chrome.

contestado el 23 de mayo de 12 a las 17:05

para el primer acercamiento, solo tengo 1 <div data-role="page" id="news">...</div> en la página, y su contenido depende de lo que hay en la cadena de consulta (#news?A muestra noticias que son del código postal "A"). entonces, realmente no puedo hacer eso porque eso significaría tener un elemento de página separado para cada código postal. Podría probar el data-dom-cache="false" en esa página 1, ver si eso lo hace. - Ian Davis

probé data-dom-cache en mi single ... , y el problema persiste. puaj. es raro porque la url tiene #news?A, pero si inspecciono el elemento en el div de una sola página, tiene data-url="news?B" ¿Cómo puedo decirle a jquery mobile que deje de jugar con mis enlaces? - Ian Davis

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.