File tree Expand file tree Collapse file tree 4 files changed +46
-8
lines changed Expand file tree Collapse file tree 4 files changed +46
-8
lines changed Original file line number Diff line number Diff line change @@ -16,6 +16,31 @@ interface SignalHandler {
16
16
disconnect : Function
17
17
}
18
18
19
+ type BridgeNavigator = ( ) => unknown
20
+
21
+ let isRouterLoaded = false
22
+ const navigatorQueue : BridgeNavigator [ ] = [ ]
23
+
24
+ export type Pusher = ReturnType < typeof createPusher >
25
+
26
+ export function switchRouterLoaded ( ) {
27
+ if ( isRouterLoaded ) return
28
+
29
+ isRouterLoaded = true
30
+ if ( navigatorQueue . length ) {
31
+ navigatorQueue . forEach ( navigator => navigator ( ) )
32
+ navigatorQueue . length = 0
33
+ }
34
+ }
35
+
36
+ export function queueNavigator ( navigator : BridgeNavigator ) : void {
37
+ if ( isRouterLoaded ) {
38
+ navigator ( )
39
+ return
40
+ }
41
+ navigatorQueue . push ( navigator )
42
+ }
43
+
19
44
export function dispatch ( payload : string ) {
20
45
const { type, ...otherPayload } : DispatchPayload = JSON . parse ( payload )
21
46
@@ -28,7 +53,13 @@ export function dispatch(payload: string) {
28
53
* function will always be invoked.
29
54
*/
30
55
if ( / .+ \/ # \/ $ / . test ( location . href ) ) {
31
- RECEIVER_MAP [ type ] && RECEIVER_MAP [ type ] ( otherPayload )
56
+ const navigator = RECEIVER_MAP [ type ]
57
+ if ( navigator ) {
58
+ queueNavigator ( ( ) => navigator ( otherPayload ) )
59
+ } else {
60
+ // eslint-disable-next-line no-console
61
+ console . error ( `[Receiver]: Unregister navigator type -> ${ type } ` )
62
+ }
32
63
}
33
64
}
34
65
Original file line number Diff line number Diff line change @@ -8,12 +8,7 @@ import {
8
8
createProp ,
9
9
registerSignalListener
10
10
} from './helper'
11
- import {
12
- SCOPES ,
13
- ScopeName ,
14
- SIGNAL_CALLBACKS ,
15
- SignalName
16
- } from '@/config/bridge'
11
+ import { SCOPES , ScopeName } from '@/config/bridge'
17
12
18
13
declare global {
19
14
interface Window {
Original file line number Diff line number Diff line change
1
+ import { switchRouterLoaded } from '@/bridge/helper'
2
+
3
+ function ensureRouterLoaded ( ) {
4
+ switchRouterLoaded ( )
5
+ }
6
+
7
+ export const afterEach = [ ensureRouterLoaded ]
Original file line number Diff line number Diff line change 1
1
import Vue from 'vue'
2
2
import Router from 'vue-router'
3
3
import Home from '@/views/Home.vue'
4
+ import { afterEach } from './guards'
4
5
5
6
Vue . use ( Router )
6
7
7
- export default new Router ( {
8
+ const router = new Router ( {
8
9
routes : [
9
10
{
10
11
path : '/' ,
@@ -22,3 +23,7 @@ export default new Router({
22
23
}
23
24
]
24
25
} )
26
+
27
+ afterEach . forEach ( hook => router . afterEach ( hook ) )
28
+
29
+ export default router
You can’t perform that action at this time.
0 commit comments