1

iframe経由でサービスワーカーを登録できます。「pushManager.subscribe」を実行しようとすると、次のようになります。

DOMException: Registration failed - permission denied

この問題は、iframe 経由の Chrome でのみ発生します。Firefoxでうまく機能します。Chromeでiframeがなくてもうまく機能します

4

3 に答える 3

3

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

アクセス許可要求は、トップ レベル ウィンドウから実行する必要があります。

唯一の代替手段 (たとえば、Pushpad Express で使用したもの) は、リダイレクトして iframe から新しいウィンドウを開き、最上位のウィンドウから許可を求め、最後に元に戻すことです。

これは、どの Web サイトがプッシュ通知の許可を求めているかをユーザーに明確にするためのものです。そうしないと、たとえば広告にプッシュ通知のプロンプトが表示され、誤解を招く恐れがあります。

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

于 2016-10-26T09:26:54.590 に答える
2

要するに、あなたはできません!Service Worker を登録するパスは、Service Worker を登録するために開かれている (最上位ドメインである) 必要があります。これを実現する 1 つの方法は次のとおりです。

iframe が次のようになっているとします。

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

postMessage を使用して iframe と通信し、許可を求めてwindow.open("https://example.com/")から、サービスワーカーを登録してトークンを取得します。

お役に立てれば :)

于 2016-10-26T07:30:14.780 に答える
0

Chrome では、トップ レベル ドメインからのプッシュをサブスクライブする必要があります。サブスクライブしないと、ユーザーがプッシュを許可している発信元が明確でないためです。

于 2016-10-25T19:02:43.983 に答える