@@ -62,14 +62,25 @@ export function registerSW(options: RegisterSWOptions = {}) {
62
62
window . location . reload ( )
63
63
} )
64
64
wb . addEventListener ( 'installed' , ( event ) => {
65
- if ( ! event . isUpdate ) {
65
+ if ( event . isUpdate === false ) {
66
66
onOfflineReady ?.( )
67
67
}
68
68
} ) ;
69
69
}
70
70
else {
71
71
let onNeedRefreshCalled = false
72
- const showSkipWaitingPrompt = ( ) => {
72
+ const showSkipWaitingPrompt = ( event ?: import ( 'workbox-window' ) . WorkboxLifecycleWaitingEvent ) => {
73
+ /*
74
+ FIX:
75
+ - open page in a new tab and navigate to home page
76
+ - add a new sw version
77
+ - open a new second tab and navigate to home page
78
+ - click reload on the first tab
79
+ - second tab refreshed, but the first tab doesn't (still with prompt)
80
+ */
81
+ if ( event && onNeedRefreshCalled && event . isExternal )
82
+ window . location . reload ( )
83
+
73
84
onNeedRefreshCalled = true
74
85
// \`event.wasWaitingBeforeRegister\` will be false if this is
75
86
// the first time the updated service worker is waiting.
@@ -83,7 +94,7 @@ export function registerSW(options: RegisterSWOptions = {}) {
83
94
// that will reload the page as soon as the previously waiting
84
95
// service worker has taken control.
85
96
wb ?. addEventListener ( 'controlling' , ( event ) => {
86
- if ( event . isUpdate )
97
+ if ( event . isUpdate === true || event . isExternal === true )
87
98
window . location . reload ( )
88
99
} )
89
100
@@ -111,8 +122,6 @@ export function registerSW(options: RegisterSWOptions = {}) {
111
122
// Add an event listener to detect when the registered
112
123
// service worker has installed but is waiting to activate.
113
124
wb . addEventListener ( 'waiting' , showSkipWaitingPrompt )
114
- // @ts -expect-error event listener provided by workbox-window
115
- wb . addEventListener ( 'externalwaiting' , showSkipWaitingPrompt )
116
125
}
117
126
}
118
127
0 commit comments