我正在使用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) 我已经成功构建了我的初始条形图.现在,我想使用转换为现有图表添加更多条形图,以获得良好的用户体验.
这是我的代码:
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)