mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
This wasn't reliable because of browser extension API limitations and required serious throttling to avoid harming performance, so I've decided to just remove it entirely for now.
78 lines
1.7 KiB
JavaScript
78 lines
1.7 KiB
JavaScript
/* global chrome */
|
|
|
|
let backendDisconnected: boolean = false;
|
|
let backendInitialized: boolean = false;
|
|
|
|
function sayHelloToBackend() {
|
|
window.postMessage(
|
|
{
|
|
source: 'react-devtools-content-script',
|
|
hello: true,
|
|
},
|
|
'*'
|
|
);
|
|
}
|
|
|
|
function handleMessageFromDevtools(message) {
|
|
window.postMessage(
|
|
{
|
|
source: 'react-devtools-content-script',
|
|
payload: message,
|
|
},
|
|
'*'
|
|
);
|
|
}
|
|
|
|
function handleMessageFromPage(evt) {
|
|
if (
|
|
evt.source === window &&
|
|
evt.data &&
|
|
evt.data.source === 'react-devtools-bridge'
|
|
) {
|
|
backendInitialized = true;
|
|
|
|
port.postMessage(evt.data.payload);
|
|
}
|
|
}
|
|
|
|
function handleDisconnect() {
|
|
backendDisconnected = true;
|
|
|
|
window.removeEventListener('message', handleMessageFromPage);
|
|
|
|
window.postMessage(
|
|
{
|
|
source: 'react-devtools-content-script',
|
|
payload: {
|
|
type: 'event',
|
|
event: 'shutdown',
|
|
},
|
|
},
|
|
'*'
|
|
);
|
|
}
|
|
|
|
// proxy from main page to devtools (via the background page)
|
|
var port = chrome.runtime.connect({
|
|
name: 'content-script',
|
|
});
|
|
port.onMessage.addListener(handleMessageFromDevtools);
|
|
port.onDisconnect.addListener(handleDisconnect);
|
|
|
|
window.addEventListener('message', handleMessageFromPage);
|
|
|
|
sayHelloToBackend();
|
|
|
|
// The backend waits to install the global hook until notified by the content script.
|
|
// In the event of a page reload, the content script might be loaded before the backend is injected.
|
|
// Because of this we need to poll the backend until it has been initialized.
|
|
if (!backendInitialized) {
|
|
const intervalID = setInterval(() => {
|
|
if (backendInitialized || backendDisconnected) {
|
|
clearInterval(intervalID);
|
|
} else {
|
|
sayHelloToBackend();
|
|
}
|
|
}, 500);
|
|
}
|