【问题标题】:Update dynamic data in service-worker.js更新 service-worker.js 中的动态数据
【发布时间】:2016-01-26 14:13:45
【问题描述】:

我有以下来自 url 的数组形式的数据。

[{"title":"hey hi","body":"hello","url":"https://simple-push-demo.appspot.com/","tag":"new"}]

service-worker.js 它在 fetch() 中有上面的 url

 'use strict';

console.log('Started', self);
self.addEventListener('install', function(event) {
  self.skipWaiting();
  console.log('Installed new', event);
});
self.addEventListener('activate', function(event) {
  console.log('Activatednew', event);
});

self.addEventListener('push', function(event) {
    try{
  console.log('Push message', event);
  var ev = event;

  //sample
  return fetch("http://localhost/push-notifications-master/app/json.php").then(function(ev,response) {
    response = JSON.parse(JSON.stringify(response));
    return response;
}).then(function(ev,j) {
    // Yay, `j` is a JavaScript object
    console.log("j", j);
 for(var i in j) {
    var _title = j[i].title;
    var _body = j[i].body;
    var _tag = j[i].tag;
     console.log("_body", _body);
    }
    ev.waitUntil(
        self.registration.showNotification("push title", {
      body: _body,
      icon: 'images/icon.png',
      tag: _tag
    }));    
});

return Promise.all(response);

    }
    catch(e){console.log("e", e)}
});

我正在尝试查看来自console.log("j",j); 中该特定网址的上述数组数据。但它显示未定义。如何在 sw.js 中获取动态数据,请指导。

【问题讨论】:

    标签: fetch service-worker fetch-api chrome-gcm


    【解决方案1】:

    在您的 addEventListener('push' .... 方法中,我认为在解析之前等待响应可能会更好。

    还有,要检查,但是你的php请求应该在https中(不是我自己检查的,但我的请求是在https上的)。

    我是怎么做的:

    event.waitUntil(
        fetch('YOUR PHP URL').then(function(response) {
            if (response.status !== 200) {
                console.log('Problem. Status Code: ' + response.status);  
                throw new Error();  
            }
            // Examine the text in the response  
            return response.json().then(function(data) { 
                if (data.error || !data.notification) {
                    console.error('The API returned an error.', data.error);  
                    throw new Error();  
                }
                var title = data.notification[0].title;  
                var body = data.notification[0].body;  
                var icon = data.notification[0].icon;  
                var notificationTag = data.notification[0].tag;
                return self.registration.showNotification(title, {body: body,icon:icon, tag: notificationTag});
            });
        })
    );
    

    json:

    {"notification" : [{"title":"TITLE","body":"BODY","icon":"URL TO ICON","tag":"TAG"}]}
    

    希望对你有用。

    【讨论】:

    • 如何处理 CORS 错误?我在 fetch API 中使用了 'mode': 'no-cors',但它返回 0 作为 http 状态码。有什么帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2018-09-01
    • 2019-12-12
    相关资源
    最近更新 更多