6

私はプッシュ通知GCMを実装するためにRuby On Railsにサービスワーカーを登録しようとしています。しかし、何も起こりません。してください、私のコードを参照してください: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'はServiceWorker APIの一部ですか?私は[docs](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API)でそれへの参照を見つけることができません。 – nicohvi

+0

@nicohvi私はgoogleのチュートリアルに従っています。このリンクを参照してください[公開Web上の通知をプッシュ](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/から配信されない限り、失敗することになります。あなたがPromiseを返す(あなたregister()の終わりに.catch(function(error) { console.warn(error); })を入れた場合は、エラーが報告さ見るであろう。

一番簡単な方法は、service-worker.jsがWebページと同じディレクトリから提供されていることを確認しています、その後、同じディレクトリの相対パスを使用する、register('service-worker.js')を呼び出す。

+0

Jeff、何も起こりません変更。私のJSファイルは同じフォルダにあります。あなたは私のレールプロジェクトをどのように構築するのか教えてください。 – Tercio

+0

現在、 'register( '/ assets/service-worker.js')'を呼び出すページにアクセスするために使用するURLは何ですか? –

+0

Jeff、 'localhost:3000/users/edit'。このビューには、サービスワーカーを登録するコードJSがあります。 – Tercio

2

チェックアウトserviceworker-rails宝石を。

ジェフが述べたように、パスがどのサービスワーカーが「スコープ内」でなければなりません。この逸品ことができますRailsアセットパイプのリソースへのルート(または他のパス)のサービスワーカーリクエストをプロキシするライン。

たとえば、あなたのserviceworkerスクリプトのエントリポイントは、あなたのRailsプロジェクトでapp/assets/javascripts/nested/directory/serviceworker.jsであれば、あなたはいくつかの簡単な構成セットアップで/serviceworker.jsからスクリプトをレンダリングするようにアプリケーションを構成できます。

# config/application.rb 
config.serviceworker.routes.draw do 
    match "/serviceworker.js" => "nested/directory/serviceworker.js" 
end 
関連する問題