【问题标题】:SharePoint JavaScript Desktop Notification IssueSharePoint JavaScript 桌面通知问题
【发布时间】:2016-02-10 11:54:59
【问题描述】:

我有一个非常奇怪的 JavaScript 问题,我没有找到任何先例,所以希望有人看到它。

我正在编写一些驻留在 SharePoint 中的 JavaScript 代码,并且我正在尝试为我的 Firefox 和 Chrome 用户使用桌面通知。

我有以下代码作为基本测试

$(document).ready(function() {
  if ((window.Notification) && (Notification.permission !== "granted")) {
    Notification.requestPermission(function(status) {
      if (Notification.permission != status) Notification.permission = status;
    });
  }

  if (Notification.permission === "granted") {
    var Notification = new Notification("This is a test");
  }
});

如果我在 SharePoint 之外的自定义网页中使用此代码,它可以正常工作。如果我在 SharePoint 中加载它,虽然它是零星的;有些页面可以正常工作,但其他页面我收到一条错误消息,提示 Notifcation.requestPermission 不是函数。如果我在 Notification 对象和 Notification.permission 上执行 console.log,我会得到不同的结果,具体取决于我是在工作页面上还是不在工作页面上。在工作页面上,我将 Notification 视为具有所有正确参数的函数,并且 Notification.permission 显示为“已授予”;不工作的页面将 Notification 作为空白对象,并且 Notification.permission 未定义。这在 SharePoint 2010 和 2013 中都会发生。

以前有人经历过吗?

【问题讨论】:

    标签: javascript sharepoint sharepoint-2010 notifications sharepoint-2013


    【解决方案1】:

    这是预期行为,因为您使用自己的代码覆盖了 Notification 对象。

    一旦你运行了var Notification = new Notification("This is a test");,你就用Notification的实例覆盖了原生的Notification函数代码。

    您应该改写类似(注意小写 n

    if (Notification.permission === "granted") {
        var notification = new Notification("This is a test");
    }
    

    requestPermission 函数在 Notification 原型中声明,这是它的构造函数的属性,但不是实例,因此您永远不能在返回的对象上调用 requestPermission new Notification(...).

    【讨论】:

    • 大写的 N 是我复制此代码时的拼写错误(它在气隙计算机上,因此无法复制和粘贴)。实际代码在变量名中使用小写的 n。此外,即使没有,requestPermission 调用也会在通知构造函数之前调用,因为只有在 Notification.permission 等于“granted”时才会调用构造函数。此代码适用于某些页面,并且在 SharePoint 之外也能正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多