diff --git a/src/content.ts b/src/content.ts index a2988c1c..2147a4a7 100644 --- a/src/content.ts +++ b/src/content.ts @@ -41,40 +41,46 @@ config.getAsync("superignore").then(async TRI_DISABLE => { if (TRI_DISABLE === "true") return -// Add cheap location change event -// Adapted from: https://stackoverflow.com/questions/6390341/how-to-detect-if-url-has-changed-after-hash-in-javascript -// -// Broken atm - on https://github.com/tridactyl/tridactyl/pull/3938 clicking onto issues doesn't do anything and we get "permission denied to access object" +try { -const realwindow = (window as any).wrappedJSObject ?? window // wrappedJSObject not defined on extension pages + // Add cheap location change event + // Adapted from: https://stackoverflow.com/questions/6390341/how-to-detect-if-url-has-changed-after-hash-in-javascript + // + // Broken atm - on https://github.com/tridactyl/tridactyl/pull/3938 clicking onto issues doesn't do anything and we get "permission denied to access object" -const triPushState = (hist => ( - (...args) => { - const ret = hist(...args) - realwindow.dispatchEvent(new Event("HistoryPushState")) + const realwindow = (window as any).wrappedJSObject ?? window // wrappedJSObject not defined on extension pages + + const triPushState = (hist => ( + (...args) => { + const ret = hist(...args) + realwindow.dispatchEvent(new Event("HistoryPushState")) + realwindow.dispatchEvent(new Event("HistoryState")) + return ret + }) + )(realwindow.history.pushState.bind(realwindow.history)) + + const triReplaceState = (hist => ( + (...args) => { + const ret = hist(...args) + realwindow.dispatchEvent(new Event("HistoryReplaceState")) + realwindow.dispatchEvent(new Event("HistoryState")) + return ret + }) + )(realwindow.history.replaceState.bind(realwindow.history)) + + realwindow.addEventListener("popstate", () => { realwindow.dispatchEvent(new Event("HistoryState")) - return ret }) -)(realwindow.history.pushState.bind(realwindow.history)) -const triReplaceState = (hist => ( - (...args) => { - const ret = hist(...args) - realwindow.dispatchEvent(new Event("HistoryReplaceState")) - realwindow.dispatchEvent(new Event("HistoryState")) - return ret - }) -)(realwindow.history.replaceState.bind(realwindow.history)) + history.replaceState = triReplaceState + history.pushState = triPushState -realwindow.addEventListener("popstate", () => { - realwindow.dispatchEvent(new Event("HistoryState")) -}) + typeof(exportFunction) == "function" && exportFunction(triReplaceState, history, {defineAs: "replaceState"}) + typeof(exportFunction) == "function" && exportFunction(triPushState, history, {defineAs: "pushState"}) -history.replaceState = triReplaceState -history.pushState = triPushState - -typeof(exportFunction) == "function" && exportFunction(triReplaceState, history, {defineAs: "replaceState"}) -typeof(exportFunction) == "function" && exportFunction(triPushState, history, {defineAs: "pushState"}) +} catch (e) { + console.error(e) +} const controller = await import("@src/lib/controller") const excmds_content = await import("@src/.excmds_content.generated")