2016-12-02 2 views
0

Отсюда https://developers.google.com/web/fundamentals/getting-started/primers/service-workersWeb Push - Размещение службы работник

  1. Если работник службы находится в корня домена, это означает, что сфера сервисного работника будет вся происхождение.
  2. Но если мы регистрируем файл работник службы в /example/sw.js, то работник службы только увидит принести события для страниц которых URL начинается с/пример/(т.е./пример/стр.1 /,/пример/страница2 /).

Второй пункт упоминается только выборки не будет работать в/(корневой или другой, чем например) если поместить работника службы в/например /.

Но сама подписка (генерация субобъекта) не создается, если рабочий-сервис находится в/пример /, и если веб-страница находится в/(корень или другой, чем пример), который документ явно не объяснить.

Пожалуйста, дайте мне знать, если даже генерация подписки (pushManager.getSubscription) у самого работника службы не произойдет.

PS: Я попробовал его на Chrome 54.0.2840.100 Ubuntu 16.04 LTS

+1

В общем, так как это веб-толчок, я бы поставил работника службы в корне, следуя стилю API уведомлений, который имеет разрешения, относящиеся к домену, а не путь. – collimarco

ответ

0

Генерация подписки объект не зависит от сферы обслуживания работников. Вы можете сделать это где угодно

Например. permission.js

export function allowNotifications(scope){ 
    if (navigator.serviceWorker && Notification){ 
    if(Notification.permission !== "granted") { 
     navigator.serviceWorker.ready.then(function(reg) { 
     subscribe(reg); 
     }); 
    } 
    } 
} 

function subscribe(reg) { 
    reg.pushManager.subscribe({userVisibleOnly: true}).then(function(pushSubscription) { 
      bindUserToDevice(JSON.stringify(pushSubscription)); 
    }, function (err) { 
     console.log('error'); 
     }); 
} 

export function bindUserToDevice(subscriptionObj) { 

    // received subsciption object should be send to backend to bind the device for pushes 
    var data = { 
    type: 'POST', 
    url : '/bind', 
    body: subscriptionObj, 
    }; 
    fetch('/bind', data); 

} 

allowNotifications функция может быть вызвана из любого места. Только файл работник службы должен присутствовать на корню, который должен иметь толчок событие

global.addEventListener('push', function(event) { 
    var pushObj = event.data.json(); 
    var pushData = pushObj.data; 

    var title = pushData && pushData.title; 
    var body = pushData && pushData.body; 
    var icon = '/img/logo.png'; 

    event.waitUntil(global.registration.showNotification(title, { 
     body: body, 
     icon: icon, 
     data:pushData 
    })); 
}); 
Смежные вопросы