0

У меня действительно странная проблема JavaScript, в которой я не нашел прецедента, так что я надеюсь, что кто-то ее увидит.Исходный код для SharePoint JavaScript Notification Issue

Я работаю над кодом JavaScript, который находится в SharePoint, и я пытаюсь использовать уведомления на рабочем столе для пользователей 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 не является функцией. Если я делаю console.log в объекте Notification и Notification.permission, я получаю разные результаты в зависимости от того, работаю ли я на рабочей странице или не работает. На рабочей странице я вижу уведомление как функцию со всеми правильными параметрами и Notification.permission появляется как «предоставлено»; на неработающих страницах есть уведомление как пустой объект, а Notification.permission не определено. Это происходит как в SharePoint 2010, так и в 2013 году.

Кто-нибудь испытал это раньше?

ответ

0

Это ожидаемое поведение, так как вы перезаписываете объект Notification своим собственным кодом.

Как только вы запустили var Notification = new Notification("This is a test");, вы перезаписали код функции Notification с экземпляром Notification.

Вы должны вместо этого написать что-то вроде (обратите внимание на нижний регистр п)

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

requestPermission функция объявлена ​​в Notification прототипа, который является собственностью его функции конструктора, но не экземпляр , поэтому вы никогда не сможете позвонить requestPermission по возвращенному объекту с new Notification(...).

+0

Столица N была опечаткой в ​​моем копировании этого кода (его на компьютере с воздушным фильтром, поэтому он не мог копировать и вставлять). Фактический код использует нижний регистр n в имени переменной. Кроме того, даже если это не так, запрос requestPermission приходит перед конструктором уведомления, поскольку конструктор вызывается только в том случае, если Notification.permission равно «предоставлен». Этот код работает на некоторых страницах и отлично работает за пределами SharePoint. –