小编Hok*_*cha的帖子

在订阅之前等待ServiceWorker完成注册

我正在使用ServiceWorker来实现用户通知.当用户首次访问该站点并批准通知时,ServiceWorker将注册并订阅:

if ('serviceWorker' in navigator) {
 console.log('Service Worker is supported');
 navigator.serviceWorker.register('/js/sw.js').then(function(reg) {
   if(/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())){
       reg.pushManager.subscribe({
           userVisibleOnly: true
       }).then(function(sub) {
           console.log('endpoint:', sub.endpoint);
           endpoint = sub.endpoint;
           fetch(MY_API+encodeURIComponent(endpoint), {
                    credentials: 'include'
                 })
       });
   }
 }).catch(function(err) {
   console.log(':^(', err);
 });
}
Run Code Online (Sandbox Code Playgroud)

在第一次访问时,这涉及到:

Uncaught (in promise) DOMException: Subscription failed - no active Service Worker
Run Code Online (Sandbox Code Playgroud)

从第二次访问开始,一切正常,因为ServiceWorker当时已处于活动状态.看起来这是一个时间问题.在尝试订阅之前,如何确保ServiceWorker已成功注册并处于活动状态?

我尝试使用navigator.serviceWorker.ready如下建议:

if ('serviceWorker' in navigator) {
 console.log('Service Worker is supported');
 navigator.serviceWorker.register('/js/sw.js').then(function(sreg) {
   console.log(':^)', sreg);
   navigator.serviceWorker.ready.then(function(reg) {
       if(/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())){
           reg.pushManager.subscribe({
               userVisibleOnly: true
           }).then(function(sub) {
               console.log('endpoint:', sub.endpoint);
               endpoint = sub.endpoint;
               fetch("https://www.wettfreun.de/?page=fetch&s=1&endpoint="+encodeURIComponent(endpoint), {credentials: …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome push-notification service-worker

9
推荐指数
1
解决办法
4979
查看次数

D3:如何更改现有条形图中的数据

我已经成功构建了我的初始条形图.现在,我想使用转换为现有图表添加更多条形图,以获得良好的用户体验.

这是我的代码:

var data = [23, 85, 67, 38, 70]; //dummy, normally much more
labellist = ['label1','label2','label3','label4','label5'];

var w = 815,
    h = 500,
    labelpad = 165,
    x = d3.scale.linear().domain([0, 100]).range([0, w]),
    y = d3.scale.ordinal().domain(d3.range(data.length)).rangeBands([0, h], .2);

mySvg = d3.select("#chart")
  .append("svg");

vis = mySvg.attr("width", w + 40)
    .attr("height", h + 20)
    .append("svg:g")
    .attr("transform", "translate(20,0)");

bars = vis.selectAll("g.bar")
    .data(data)
    .enter().append("svg:g")
    .attr("class", "bar")
    .attr("transform", function(d, i) { return "translate(" + labelpad + "," + y(i) + ")"; })


bars.append("svg:rect")

    .transition()
    .duration(500)
    .attr("width", …
Run Code Online (Sandbox Code Playgroud)

javascript charts updates d3.js

4
推荐指数
1
解决办法
9087
查看次数