繁体   English   中英

尝试在 javascript 中使用 sessionStorage

[英]Trying to use sessionStorage in javascript

我试图每 session 只显示一次弹出窗口 window。为了实现这一点,我使用 sessionStorage function。但是,每当我重新加载 web 页面时,弹出窗口就会出现。 你能告诉我我在哪里犯了错误吗?

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

下面是节目function

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

忘记dialogue.show();

如果您在浏览器的新选项卡中尝试以下代码:

window.sessionStorage.setItem('message','true');
is_dialogue = window.sessionStorage.getItem('message');
is_dialogue != 'true' // false 

刷新页面并运行

is_dialogue = window.sessionStorage.getItem('message');
is_dialogue != 'true' // false 

您的代码中可能有一些东西可以在挂载或创建时清理会话存储?

你的逻辑倒退了。 您需要检查是否已设置sessionStorage项。 如果尚未设置,请显示对话框然后设置它。

if (!sessionStorage.getItem('notified')) {
  let dialogue = new IMu.App.Dialogue();
  dialogue.setHtmlMessage(IMu.string('dialogue-heading'));
  dialogue.show({ showDetails: true });
  sessionStorage.setItem('notified', 'true');
}

无需检查存储属性的值。 简单地测试它的存在就足够了。

经过一些研究发现要显示弹出窗口的答案,但刷新页面时不应显示它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM