Intentar activar una función (digamos una alerta) con solo presionar el botón Atrás (cada vez).
El código va como:
$(function() { if (window.history && window.history.pushState) { window.history.pushState('', null, './'); $(window).on('popstate', function() { alert('Back button was pressed.'); }); } }); <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>Sin embargo, el código anterior funciona pero solo una vez en la carga de la página, para que vuelva a funcionar, tengo que volver a cargar la página, por lo tanto, la función se ejecuta nuevamente para que detecte la "pulsación posterior".
Para superar esto, intenté llamar a la función en la misma función.
function call() { if (window.history && window.history.pushState) { window.history.pushState('', null, './'); $(window).on('popstate', function() { alert('Back button was pressed.'); call(); }); } } $(document).ready(function() { call(); }); <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> Esta vez, la carga en la página, se llama a call() y activa la alerta en la pulsación posterior. Pero la segunda vez que presiona Atrás, la alerta se activa dos veces, la tercera vez que presiona el botón Atrás, la alerta se activa 4 veces y así sucesivamente...
Aquí está el JSFiddle para jugar.
Hay algo de lógica que parece que me estoy perdiendo. Cualquier ayuda es apreciada.
Después de un poco de JSFiddling, manipulé un poco mi código para que funcionara de la manera que necesitaba.
la actualización no justificaría la consulta anterior, pero cumplió con mi requisito.
Aquí está el código:
<div class="some" style="width:100px;height:50px;background:green;display:none;"></div> <button class="some_btn">tada</button> <script> $(".some_btn").click(function() { $(".some").css("display","block"); call(); }); function call() { if (window.history && window.history.pushState) { if($('.some').css('display') == 'block') { window.history.pushState('', null, './'); $(window).on('popstate', function() { $(".some").css("display","none"); }); } else { } } } </script> entonces, en el código anterior, la call() se activa cada vez que se muestra ese bloque en particular y se anula el "botón Atrás" y al ocultar el bloque, el botón Atrás se habilita.
Espero que esto ayude al que lo necesita.