// 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 { | |
sendListening() | |
} | |
} | |