6

Я пытаюсь зарегистрировать сервисного работника в Ruby On Rails для реализации push-уведомления GCM. Но ничего не происходит. Пожалуйста, ознакомьтесь с моим кодом ниже:Как зарегистрировать сервисного работника в Ruby on Rails?

if ('serviceWorker' in navigator) { 
    navigator.serviceWorker.register('/assets/service-worker.js') 
    .then(initialiseState); 
    } else { 
    window.Demo.debug.log('Service workers aren\'t supported in this browser.'); 

Эта деталь отлично работает. Но, когда я звоню navigator.serviceWorker.ready.then(function(serviceWorkerRegistration), ничего не происходит.

Я искал поисковую систему и есть несколько вещей, которые могут мне помочь.

Может кто-нибудь мне помочь?

+0

Вы уверены, что 'serviceWorker. ready' является частью API ServiceWorker? Я не могу найти ссылки на него в [docs] (https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API). – nicohvi

+0

@nicohvi Я следую руководству Google. См. В этой ссылке [Push-уведомления в открытом Интернете] (https://developers.google.com/web/updates/2015/03/push-notificatons-on-the-open-web) – Tercio

ответ

2

Сценарий рабочего места службы, service-worker.js в вашем случае, должен обслуживаться либо с одним URL-адресом каталога, либо с его страницей, либо с подпутьем.

Вы используете путь /assets/service-worker.js, поэтому, если страница регистрации также не отправлена ​​с /assets/, она будет терпеть неудачу. Если поставить .catch(function(error) { console.warn(error); }) в конце вашего register() (который возвращает Promise, вы бы увидели, сообщили там ошибка.

Проще всего сделать, это убедиться в том, что service-worker.js подается из того же каталога, как веб-страницы , а затем вызвать register('service-worker.js'), которая использует относительный путь в тот же каталог.

+0

Джефф, ничего не происходит с изменения. Мои файлы JS находятся в одной папке. Вы предлагаете мне, как это будет структурировать проект моих рельсов? – Tercio

+0

Какой URL-адрес вы используете для доступа к странице, которая в настоящее время вызывает 'register ('/ assets/service-worker.js')'? –

+0

Jeff, 'localhost: 3000/users/edit'. В этом представлении есть код JS, который регистрирует сервисного работника. – Tercio

2

Отъезд serviceworker-rails камень.

Как уже упоминалось Джефф, путь, по которому работник службы должен быть «в рамках». Этот камень позволяет вы запрашиваете запросы рабочего пользователя службы в корневом каталоге (или любом другом пути) к ресурсу в канале ресурсов Rails линия.

Например, если ваш serviceworker сценарий точка входа в app/assets/javascripts/nested/directory/serviceworker.js в проекте Rails, вы можете настроить приложение, чтобы сделать скрипт из /serviceworker.js с некоторой простой настройки конфигурации:

# config/application.rb 
config.serviceworker.routes.draw do 
    match "/serviceworker.js" => "nested/directory/serviceworker.js" 
end 
Смежные вопросы