Estoy tratando de mostrar una ventana emergente solo una vez por sesión. Para lograr eso, estoy usando la función sessionStorage. sin embargo, la ventana emergente aparece cada vez que recargo la página web. ¿Puedes decirme dónde estoy cometiendo el error?
dialogue = new IMu.App.Dialogue(); dialogue.setHtmlMessage(IMu.string('dialogue-heading')); dialogue.show({ showDetails: true }); window.sessionStorage.setItem('message','true'); var is_dialogue = window.sessionStorage.getItem('message'); if (is_dialogue != 'true') { dialogue.show(); }A continuación se muestra la función de mostrar
show: function(options, callback) { if (typeof(options) == 'function') { callback = options; options = undefined; } var test = jQuery('body').children('div.imu-dialogue'); jQuery('body').children('div.imu-dialogue').remove(); var owner = self.owner = jQuery('body').child('div', 'imu-dialogue'); var box = owner.child('div', 'box'); var message = box.child('div', 'message'); if (this.message) { var value = this.message.value; var method = this.message.type; message[method](value); } if (self.details) { var details = box.child('div', 'details'); for (var i in self.details) { if (! self.details.hasOwnProperty(i)) continue; var detail = details.child('div', 'detail'); var value = self.details[i].value; var method = self.details[i].type || 'text'; detail[method](value); } var show = box.child('div', 'show-details'); if (! options || options.showDetails !== true) { show.text('Details'); details.hide(); } else { details.show(); show.text('I agree'); } show.on('click', function() { self.owner.remove(); }); }Olvídate del dialogue.show();
Si prueba en una nueva pestaña de su navegador el siguiente código:
window.sessionStorage.setItem('message','true'); is_dialogue = window.sessionStorage.getItem('message'); is_dialogue != 'true' // falseActualizar la página y ejecutar
is_dialogue = window.sessionStorage.getItem('message'); is_dialogue != 'true' // false¿Es posible que tenga algo en su código que limpie el almacenamiento de la sesión montado o creado?
Tienes tu lógica al revés. Debe verificar si el elemento sessionStorage se ha configurado primero . Si no se ha configurado, muestre el cuadro de diálogo y luego configúrelo.
if (!sessionStorage.getItem('notified')) { let dialogue = new IMu.App.Dialogue(); dialogue.setHtmlMessage(IMu.string('dialogue-heading')); dialogue.show({ showDetails: true }); sessionStorage.setItem('notified', 'true'); }No es necesario verificar el valor de la propiedad almacenada. Simplemente probar su existencia es suficiente.
Después de algunas investigaciones, se encontró la respuesta para que se mostrara la ventana emergente, pero no debería mostrarse cuando se actualiza la página.
var is_dialogue = window.sessionStorage.getItem("dialogue"); if (is_dialogue != 'true') { dialogue = new IMu.App.Dialogue(); dialogue.setHtmlMessage(IMu.string('dialogue-heading')); dialogue.show({ showDetails: true }); sessionStorage.setItem("dialogue", "true"); }