如何解决代理/覆盖 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 举报,一经查实,本站将立刻删除。