2016-05-17 3 views
1

プッシュ通知を受け取るサービスワーカーがあり、Chrome用デスクトップではうまく動作しますが、Android用Chromeではうまく動作しません。Service Worker clients.openWindowは、要求されたURLの代わりにマニフェストからstart_urlを開きます。

期待どおりに動作することもありますが、場合によってはnotificationURL変数の値ではなく、manifest.jsonのstart_url値を開き始めます。

通知URLは次のようになります。通知場合は、いくつかのケースで

ので
self.addEventListener('notificationclick', function(event) { 

    var notificationURL = event.notification.data.url; 

    event.notification.close(); 

    event.waitUntil(clients.matchAll({ 
     type: 'window' 
    }).then(function(clientList) { 

     for (var i = 0; i < clientList.length; i++) { 
      var client = clientList[i]; 
      if (client.url === notificationURL && 'focus' in client) { 
       return client.focus(); 
      } 
     } 

     if ('openWindow' in clients) { 

      // This prints "notificationURL: https://www.example.com/abc/123/?source=notification". 
      console.log('notificationURL:', notificationURL); 

      // But this opens "https://www.example.com/?source=manifest". 
      return clients.openWindow(notificationURL); 
     } 

    })); 

}); 

、何らかの理由: https://www.example.com/?source=manifest

サンプルコード: https://www.example.com/abc/123/?source=notification

マニフェストSTART_URL値は次のように見えますURLは「https://www.example.com」で始まり、上記コードは常にhttps://www.example.com/?source=manifestとなります。

これは、ホーム画面にサイトを追加したことに関連していますか?

これは予期された現象ですか?

注:マニフェストのstart_urlを開きますが、スタンドアロンモードでは開きません。

答えて

0

私は同様の問題に遭遇しました(または実際には正反対のようです):対処するブラウザがあればプッシュ通知のclients.openwindowは正常に機能しました。だから、http://example.com/some/path/pageは何の問題もなく開かれた。

ただし、誰かが「ホーム画面に追加」を使用してスタンドアロンアプリをインストールすると、すぐには機能しなくなります。アプリケーションは、提供したURLに関係なく、常にstart_urlを開くだけです。私はすべてを試みた。私のマニフェストとサービス担当者の範囲を変更すると、openWindowの約束が成就した後でウィンドウ上でnavigate()を呼びたいという絶望的な試み(.then()もwtfと呼ばれていません)などでした。今では主題全体のインターネット全体ですが、私は解決策を見つけられませんでした。

最後に、私はマニフェストに 'display: "スタンドアローン"を "表示"に変更することにしました。そしてリンクは再び働いた!もちろん、これはあなたのアプリの振る舞いをもはや魅力的ではないように変更します(それはウェブページのショートカットに似ています)が、私にとっては問題を解決するための許容可能な回避策でした。

インストールしたスタンドアロンアプリ内のページを開くことが現時点ではサポートされていないと感じました。誰もがそう示唆してアイデアを持っている場合は、私だすべての耳;-)

+0

別の回避策が見つかりました。開こうとしているURLが同じスキーマとstart_urlのホストを持っている場合は、start_urlが開きます。しかし、私がスキーマ(https)をhttpに変更すると、正しいURLが開き、私のサーバーはhttpsにリダイレクトします。しかし、これにはいくつかのセキュリティ上の問題があります... – RockoDev

0

だけreturn client.focus();

このライン

また

client.navigate(notificationURL);

return clients.openWindow(notificationURL)

をする 変更を加える前に、

return clients.openWindow(notificationURL).then(function(client){ client.navigate(notificationURL); });

関連する問題