web-dev-qa-db-ja.com

Google Chrome:DOMException:登録に失敗しました-マニフェストが空または欠落しています

(プッシュパッドを使用して)自分のWebサイトにプッシュ通知を実装しようとしています。したがって、次の内容で"manifest.json"を作成しました。

{
    "gcm_sender_id": "my_gcm_sender_id",
    "gcm_user_visible_only": true
}

もちろん、有効なGCMアカウントを作成し、送信者IDを持っています

manifest.jsonをルートディレクトリに配置し、この行もindex.phpに追加しました。

<link rel="manifest" href="/manifest.json">

Firefoxを使用すると、すべてが正常に機能し、プッシュ通知を送受信できます(したがって、マニフェストインクルードは正常に機能すると思います)が、Chromeは機能しません...

コンソールに次のエラーが表示されます。

Uncaught (in promise) DOMException: Registration failed - manifest empty or missing

私は長い間Googleを検索し、見つけたすべてを試しましたが、何も機能しません。

私が試したこと:

  1. 「Editor」でmanifest.jsonを作成し、タイプAll Types(非表示。txt-ファイルなし)およびUTF-8-エンコーディング。
  2. chromeを再起動しました
  3. chromeのキャッシュ、履歴などをクリアしました.

誰かが私を助けてくれることを本当に願っています。

9
Fabian H.

WWWのどこにも答えが見つからなかったのですが、しばらくしてそれを機能させることができたので、おそらく同じ問題を抱えている他のユーザーに解決策/答えを提供したいと思います。

プッシュパッドファイルを含めたファイルでは、<head>-タグの前にいくつかのPHPコードを記述して、いくつかのファイルを含めました。データベース接続用。 PHPコードを<head>-Tagの下に移動した後、すべてが正常に機能しました。

0
Fabian H.

私にとってはリダイレクトでした。 manifest.jsonは、リダイレクトなしで200ステータスコードを返す必要があります(サーバーから直接利用できる必要があります)。あなたは経由で応答を確認することができます

wget --max-redirect=0 https://example.com/manifest.json

または

curl https://example.com/manifest.json

3
Sudhanshu

同じ問題に直面し、headタグの直後にマニフェストファイルを追加しました。それは私のために働いた。乾杯!

3
Shreekanta

これは、ServiceWorkerスコープの問題である可能性があります。ファイル/ディレクトリを再配置したときに、同様の問題が発生しました。 sw.jsがmanifest.jsonと同じレベルにあることを確認してください。そうでない場合、サービスワーカーはマニフェストを見つけることができません。両方をディレクトリのルートに配置してみてください。オプションで、サービスワーカーのscopeserviceWorker.register()に追加して指定できます。

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw-test/sw.js', {scope: '/sw-test/'})
  .then(function(reg) {
    // registration worked
    console.log('Registration succeeded. Scope is ' + reg.scope);
  }).catch(function(error) {
    // registration failed
    console.log('Registration failed with ' + error);
  });
}

詳細はこちら: https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers

1
Trob Frank

あなたの「manifest.json」が一般公開されているかどうか疑問に思っていましたか?

そうでない場合は、パブリックアクセス可能に設定して、それが役立つかどうかを確認できます。

そして、「manifest.json」を取得するときの現在のクロムはCookieを提供しないようです。

0
Tom Tang

このバグを修正するには、次の3つの方法があるようです。a)「manifest.json」ファイルへのリダイレクトはありません。 b)このファイルへのリンクをタグの先頭に配置します。 c)このファイルの前に他のマニフェストファイルがないことを確認してください。これは、Webプッシュスクリプトが最初のマニフェストファイルをインポートしようとし、間違ったデータが原因でエラーを返すように見えるためです。私は3つすべてを試し、最終的にChromeを動作させました。

0
Łukasz P