【问题标题】:How to add a callback to a function in the moment when it is triggered?如何在触发时向函数添加回调?
【发布时间】:2018-02-24 07:55:45
【问题描述】:

我想为这个函数添加一个回调:Notification.requestPermission()。问题是我不知道它(该功能)何时会被触发,因此我认为我必须在点击或类似的东西时绑定浏览器通知权限框,以实现每次用户点击"ALLOW",@ 987654327@ 或 "X"(close) javascript 文件找出点击了哪个按钮并执行以下操作:

if (result === 'denied')
{
    console.log('Permission wasn\'t granted. Allow a retry.');
    return;
}
if (result === 'default')
{
    console.log('The permission request was dismissed.');
    return;
}
if (result === 'accepted')
{
    console.log('The permission request was accepted.');
    return;
}

我的问题是我不知道如何将它绑定到下面那个浏览器通知权限框↓

我不想调用权限提示,即Notification.requestPermission() 函数。我只想检测Permission 何时更改并对该结果进行处理。

【问题讨论】:

  • 您需要了解如何使用Promises。你可以使用Notification.requestPermission().then(function(permission) { ... });
  • 问题是我不想调用权限提示,即Notification.requestPermission(),我只想检测Permission 何时更改并对该结果进行处理。
  • 也许你可以试试pushsubscriptionchange eventNotification.permission的组合

标签: javascript jquery notifications web-push


【解决方案1】:

我正在寻找同样的东西,我在这里找到了这个答案: How to listen for web notification permission change

我认为这就是您要寻找的。它对我有用。

【讨论】:

    【解决方案2】:

    soo,我不完全确定,如果我理解你的话,但我认为你不需要将你的东西绑定到通知权限框。

    根据MDN,有两种方法可以做到这一点:要么使用promises

    Notification.requestPermission().then(function(permission) { ... });
    

    callback

    Notification.requestPermission(callback);
    

    我认为如何获取权限值的承诺更明显,但如果您使用“正常”回调,您可以将代码包装到函数中并检查权限参数:

    function doStuff(result){
      if (result === 'denied')
       {
         console.log('Permission wasn\'t granted. Allow a retry.');
         return;
        }
      if (result === 'default')
     {
        console.log('The permission request was dismissed.');
        return;
      }
     if (result === 'accepted')
    {
       console.log('The permission request was accepted.');
       return;
     }
    }
    

    然后调用:

    Notification.requestPermission(doStuff(permission));
    

    然后可能将结果保存在全局变量中(我不知道你想用它做什么,所以是的)

    【讨论】:

      【解决方案3】:

      您通常会请求页面加载权限。 使用 jquery,您可以执行类似

      的操作
      jQuery(document).ready(function() {
      if (!("Notification" in window)) {
          console.log("This browser does not support desktop notification");
      } else if (Notification.permission !== 'denied') {
          Notification.requestPermission(function(permission) {
              if (!('permission' in Notification)) {
                  Notification.permission = permission;
              }
          });
      }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-07
        • 2019-06-01
        • 2013-12-18
        • 1970-01-01
        • 2015-08-27
        • 2015-10-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多