微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

代理/覆盖 ServiceWorkerRegistration 函数的方法

如何解决代理/覆盖 ServiceWorkerRegistration 函数的方法

我正在尝试代理 ScreenManager: MainScreen: GroupScreen: <DialogContent>: textfield: textfield orientation: "vertical" spacing: "12dp" size_hint_y: None height: "120dp" MDTextField: id: textfield hint_text: "Group name" MDFlatButton: id: btn1 text: "Done" text_color: self.theme_cls.primary_color on_release: root.get_screen['main'].close_dialog() <MainScreen>: name: 'main' mdlist: mdlist FloatLayout: size_hint: 1,0.89 ScrollView: MDList: id: mdlist MDFloatingActionButton: pos_hint: {'right': 0.95,'y': 0.05} icon: "android" theme_text_color: "Custom" text_color: app.theme_cls.primary_color on_release: root.show_dialog() <GroupScreen>: name: 'group' MDLabel: text: 'Welcome' halign: 'center' MDRectangleFlatButton: text: 'Back' pos_hint: {'center_x': 0.5,'center_y': 0.3} on_release: root.manager.current = 'main' 对象的 showNotification 方法。这是我现在的做法:

ServiceWorkerRegistration

调用 function swNotificationCallback(title,opt) { console.log("title",title); console.log("options",opt); return true } function createSWHandler(original) { return (title,opt) => { if (swNotificationCallback(title,opt)) {return original(title,opt)} } } navigator.serviceWorker.getRegistrations().then(val => val.forEach(sw => { if (!sw._showNotification) { // backup the old just in case sw._showNotification = sw.showNotification; sw.showNotification = createSWHandler(sw.showNotification); } })); 正确记录所有内容,但未显示通知并抛出此错误sw.showNotification

有什么办法可以解决这个问题吗?我认为可以使用代理,但我不确定如何重新分配注册的服务工作者。

解决方法

您需要在实例上调用方法,而不是作为没有上下文的普通函数。使用call

function createSWHandler(original) {
    return function(title,opt) {
//         ^^^^^^^^
        if (swNotificationCallback(title,opt)) {
           return original.call(this,title,opt)
//                        ^^^^^^^^^^^
        }
    }
}

你也可以

createSWHandler(sw.showNotification.bind(sw))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。