Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions src/content.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,37 @@ import {
postWebpageMessage,
} from './services/webpage';

const PROBE_INTERVAL_MS = 1000;

postWebpageMessage('INIT');
addWebpageMessageListener((message) => {
postExtensionMessage(message);
});

// A form can mount long after this script runs — inside a dialog, or on a client-side route —
// and the page only announces itself in reply to an INIT. Probing just once therefore misses
// every form that did not already exist, so keep asking while the tab is in the foreground.
// https://github.com/react-hook-form/devtools-extension/issues/15
let probeInterval: number | undefined;

const startProbing = () => {
if (probeInterval === undefined) {
probeInterval = window.setInterval(
() => postWebpageMessage('INIT'),
PROBE_INTERVAL_MS,
);
}
};

const stopProbing = () => {
window.clearInterval(probeInterval);
probeInterval = undefined;
};

document.addEventListener('visibilitychange', () =>
document.hidden ? stopProbing() : startProbing(),
);

if (!document.hidden) {
startProbing();
}