2016-10-25 4 views
1

iframeでサービスワーカーを登録できます。私は「pushManager.subscribe」を実行しようとすると私が持っている:Chromeのiframe経由でpushManagerを登録するにはどうすればよいですか?

DOMException: Registration failed - permission denied 

この問題はインラインフレームを経由してChromeでのみです。 Firefoxではうまく動作します。 Chromeのiframeなしでうまく動作します。

答えて

1

短いストーリー、あなたはできません! サービスワーカーを登録するには、サービスワーカーを登録するパスを開く必要があります(最上位ドメインにする必要があります)。これを達成する 一つの方法は次のとおりです。

<iframe src="https://example.com"></iframe> 

サービス労働者を登録し、トークンを取得するためのiframeと通信し、許可を求めるためにのpostMessageを使用し、window.open("https://example.com/")

は、あなたのiframeを次のようになりますと仮定します。

希望します。

0

Chromeでは、トップレベルドメインからのプッシュをリクエストする必要があります。

+0

Facebookのアプリケーションを作る: 'https:// apps.facebook.com/xxxxxxx /' - appのアドレス。 'https:// app.example.com/fb/build /' - iframeのアドレス。 "トップレベルのドメイン"とはどういう意味ですか? Chromeは「https:// apps.facebook.com/xxxxxxx /」からのプッシュを購読する必要があります。 または、iframeのアドレスを 'https:// app.example.com /'に変更し、そこにserviceWorkerを配置する必要があります。 –

+0

Facebookのアプリの仕組みは正確に分かりません。ページを見ているときは、URLバーに表示される原点からsubscribeを呼び出す必要があります。 –

2

iframeは使用できません。許可されていません。

トップレベルウィンドウから許可要求を実行する必要があります。

私たちがPushpad Expressに使用していた唯一の方法は、iframeから新しいウィンドウをリダイレクト/オープンし、トップレベルウィンドウから許可を求めてから最後にリダイレクトすることです。

これは、どのウェブサイトがプッシュ通知の許可を求めるのかを明確にするためのものです。さもなければ、例えば、広告がプッシュ通知のためのプロンプトを表示し、誤解を招く恐れがあることです。

私はまた、​​属性に新しい値を追加することを提案しました。プッシュ通知のプロンプトを許可するために、この仕様は現在サポートしていません。iframe

関連する問題