分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

MetaMask/sw-controller

发布时间:2023-09-06 02:21责任编辑:白小东关键词:暂无标签

https://github.com/MetaMask/sw-controller

Service Worker Controller

Used to register a service worker and listen for a ready event. Can be used with sw-stream for easy plumbing.

这个模块是用来登录一个service worker并监听准备好的事件。可以与sw-stream结合使用

Usage

const SwController = require(‘sw-controller‘)const createSwStream = require(‘sw-stream‘)const controller = new SwController({ ?fileName: ‘/service-worker.js‘, ?// optional, scope used when registering service worker ?scope: ‘/‘, ?// default: true, pings the service worker to keep it alive ?keepAlive: true,})controller.once(‘ready‘, () => { ?const swStream = createSwStream({ ???serviceWorker: controller.getWorker(), ?}) ?// talk to the service worker})controller.startWorker()

sw-controller/lib/index.js

const EventEmitter = require(‘events‘)module.exports = class ClientSideServiceWorker extends EventEmitter { ???constructor (opts) { ???super() ???// opts ???this.fileName = opts.fileName ???this.scope = opts.scope ???this.keepAlive = opts.keepAlive === undefined ? true : opts.keepAlive ???// service worker refs ???this.serviceWorkerApi = navigator.serviceWorker ???this.activeServiceWorker = null ???// ready status ???this.ready = false ???this.once(‘ready‘, () => this.ready = true) ???????// keep alive ???this.keepAliveActive = false ???this.keepAliveInterval = opts.keepAliveInterval || 60000 ???this.keepAliveIntervalRef = null ???this.keepAliveDelay = opts.keepAliveDelay || 0 ???if (this.keepAlive) { ?????this.once(‘ready‘, () => this.startKeepAlive()) ???} ???// start ???if (opts.autoStart) this.startWorker() ?} ?getWorker() { ???return this.activeServiceWorker || this.serviceWorkerApi.controller ?} ?async startWorker () { ???const registeredWorker = await this.registerWorker() ???// forward messages and errors ???this.serviceWorkerApi.addEventListener(‘message‘, (messageEvent) => this.emit(‘message‘, messageEvent)) ???this.serviceWorkerApi.addEventListener(‘error‘, (err) => this.emit(‘error‘, err)) ???const swReady = await this.serviceWorkerApi.ready ???this.activeServiceWorker = swReady.active ???this.activeServiceWorker.onerror = (err) => this.emit(‘error‘, err) ???this.emit(‘ready‘, this.activeServiceWorker) ?} ?async registerWorker () { ???const registeredWorker = await this.serviceWorkerApi.register(this.fileName, { scope: this.scope }) ???registeredWorker.onupdatefound = (event) => { ?????this.emit(‘updatefound‘) ?????registeredWorker.update() ???} ???return registeredWorker ?} ?sendMessage (message) { ???return new Promise((resolve, reject) => { ?????const messageChannel = new MessageChannel() ?????messageChannel.port1.onmessage = (event) => { ???????if (event.data.err) { ?????????reject(event.data.error) ???????} else { ?????????resolve(event.data.data) ???????} ?????} ?????this.getWorker().postMessage(message, [messageChannel.port2]) ???}) ?} ?startKeepAlive () { ???if (this.keepAliveActive) return ???this.keepAliveActive = true ???setTimeout(() => { ?????this.keepAliveIntervalRef = setInterval(() => { ???????this.emit(‘sendingWakeUp‘) ???????this.sendMessage(‘wakeup‘) ?????}, this.keepAliveInterval) ???}, this.keepAliveDelay) ?} ?stopKeepAlive () { ???if (!this.keepAliveActive) return ???clearInterval(this.keepAliveIntervalRef) ???this.keepAliveIntervalRef = null ???this.keepAliveActive = false ?}}
 

MetaMask/sw-controller

原文地址:https://www.cnblogs.com/wanghui-garcia/p/9915567.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved