-
-
Notifications
You must be signed in to change notification settings - Fork 4.1k
/
Copy pathbackend.js
55 lines (48 loc) · 1.42 KB
/
backend.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// this is injected to the app page when the panel is activated.
import { initBackend } from '@back'
import { Bridge } from '@vue-devtools/shared-utils'
window.addEventListener('message', handshake)
function sendListening() {
window.postMessage({
source: 'vue-devtools-backend-injection',
payload: 'listening',
}, '*')
}
sendListening()
function handshake(e) {
if (e.data.source === 'vue-devtools-proxy' && e.data.payload === 'init') {
window.removeEventListener('message', handshake)
let listeners = []
const bridge = new Bridge({
listen(fn) {
const listener = (evt) => {
if (evt.data.source === 'vue-devtools-proxy' && evt.data.payload) {
fn(evt.data.payload)
}
}
window.addEventListener('message', listener)
listeners.push(listener)
},
send(data) {
// if (process.env.NODE_ENV !== 'production') {
// console.log('[chrome] backend -> devtools', data)
// }
window.postMessage({
source: 'vue-devtools-backend',
payload: data,
}, '*')
},
})
bridge.on('shutdown', () => {
listeners.forEach((l) => {
window.removeEventListener('message', l)
})
listeners = []
window.addEventListener('message', handshake)
})
initBackend(bridge)
}
else if (e.data.source !== 'vue-devtools-backend-injection') {
sendListening()
}
}