31 lines
884 B
TypeScript
31 lines
884 B
TypeScript
import { ContentScriptContext } from '.';
|
|
import { WxtLocationChangeEvent } from './custom-events';
|
|
|
|
/**
|
|
* Create a util that watches for URL changes, dispatching the custom event when detected. Stops
|
|
* watching when content script is invalidated.
|
|
*/
|
|
export function createLocationWatcher(ctx: ContentScriptContext) {
|
|
let interval: number | undefined;
|
|
let oldUrl: URL;
|
|
|
|
return {
|
|
/**
|
|
* Ensure the location watcher is actively looking for URL changes. If it's already watching,
|
|
* this is a noop.
|
|
*/
|
|
run() {
|
|
if (interval != null) return;
|
|
|
|
oldUrl = new URL(location.href);
|
|
interval = ctx.setInterval(() => {
|
|
let newUrl = new URL(location.href);
|
|
if (newUrl.href !== oldUrl.href) {
|
|
window.dispatchEvent(new WxtLocationChangeEvent(newUrl, oldUrl));
|
|
oldUrl = newUrl;
|
|
}
|
|
}, 1e3);
|
|
},
|
|
};
|
|
}
|