【问题标题】:Multiple occurence of web notification网络通知多次出现
【发布时间】:2019-08-02 23:46:16
【问题描述】:

如果用户打开页面 10 秒,我想向他们显示网络通知。我已经取得通知许可。 问题这里是通知发生多次,即使用户在不到 10 秒内返回页面。已经使用 clearTimeout 刷新 myVar 值......但没有运气......任何帮助!

var myVar;
window.onblur = function myFunction() {
    myVar = setTimeout(function () {
        var notification = new Notification("XXX page is open in background ");
    }, 10000);
    clearTimeout(myVar);
};

希望只有当用户多次离开页面时,每次都会触发通知......但如果他回到页面,它就不会出现......

【问题讨论】:

  • 我想你在问两件事:a)如何防止多个弹出窗口,b)如何在用户离开并进入页面几次后才触发弹出窗口。请在您的问题中将它们分开。

标签: notifications settimeout onblur cleartimeout


【解决方案1】:

嗯,这可能是由于测试。您必须意识到每次离开页面时都会触发 window.onblur。所以如果你离开,进入,离开,进入,离开,你会得到3个弹出窗口;每个事件独立运行。

你应该做的是在你的 window.onfocus 事件中调用 clearTimeout();不要忘记在弹出处理代码和 onfocus 事件中清除 myVar 变量(并测试它是否为空)。

【讨论】:

  • 您好 jvo,我也尝试过清除超时...但 myVar 值不是全局的,正如您在代码中看到的那样...所以在 onFocus 事件中无法清除...我是对这种语言非常陌生...如果您可以编写一些代码会非常有帮助..
  • 我遇到的问题是……每当我尝试离开页面时,就会出现通知,但是当我再次打开标签时,通知会再次出现。
  • 你的 myVar 是全局的,因为它在函数之外(注意:更具体的名称会很有用,你永远不知道哪个其他库可能使用 'myVar')。当您再次打开选项卡时出现弹出窗口的原因可能是浏览器在不活动时暂停弹出窗口(想象一下不断从其他页面获取弹出窗口,分散您当前工作的注意力!)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 2019-12-03
相关资源
最近更新 更多