diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 1c0e8ce..aa38145 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -52,12 +52,12 @@ function regexArray(service, url, config, options, frontend) { /** * @param {URL} url * @param {string} type - * @param {URL} initiator + * @param {URL} originUrl * @param {boolean} forceRedirection */ -async function redirectAsync(url, type, initiator, forceRedirection) { +async function redirectAsync(url, type, originUrl, documentUrl, forceRedirection) { await init() - return redirect(url, type, initiator, forceRedirection) + return redirect(url, type, originUrl, documentUrl, forceRedirection) } /** @@ -171,7 +171,7 @@ function rewrite(url, frontend, randomInstance) { return new URLSearchParams(prefs).toString() } - if (initiator && initiator.host === "earth.google.com") return randomInstance + if (originUrl && originUrl.host === "earth.google.com") return randomInstance let mapCentre = "#" let prefs = { layers: "mapnik" } @@ -595,11 +595,11 @@ function rewrite(url, frontend, randomInstance) { /** * @param {URL} url * @param {string} type - * @param {URL} initiator + * @param {URL} originUrl * @param {boolean} forceRedirection * @returns {string | undefined} */ -function redirect(url, type, initiator, forceRedirection, incognito) { +function redirect(url, type, originUrl, documentUrl, forceRedirection, incognito) { if (type != "main_frame" && type != "sub_frame" && type != "image") return let randomInstance let frontend @@ -623,6 +623,12 @@ function redirect(url, type, initiator, forceRedirection, incognito) { continue } + if (type != "main_frame" && documentUrl && options[service].redirectType == "sub_frame") { + if (regexArray(service, documentUrl, config, options, frontend)) { + return + } + } + if ( config.services[service].embeddable && type != options[service].redirectType && @@ -636,7 +642,7 @@ function redirect(url, type, initiator, forceRedirection, incognito) { if (instanceList === undefined) break if (instanceList.length === 0) return null - if (initiator && instanceList.includes(initiator.origin)) { + if (originUrl && instanceList.includes(originUrl.origin)) { if (type != "main_frame") return null else return "BYPASSTAB" } diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 576365b..16ca38d 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -28,15 +28,17 @@ browser.webRequest.onBeforeRequest.addListener( const old_href = url.href if (new RegExp(/^chrome-extension:\/{2}.*\/instances\/.*.json$/).test(url.href) && details.type == "xmlhttprequest") return - let initiator + let originUrl try { - if (details.originUrl) initiator = new URL(details.originUrl) - else if (details.initiator && details.initiator !== "null") initiator = new URL(details.initiator) + if (details.originUrl) originUrl = new URL(details.originUrl) } catch { return null } + let documentUrl + try { if (details.documentUrl) documentUrl = new URL(details.documentUrl) } + catch (error) { return null } if (tabIdRedirects[details.tabId] == false) return null - let newUrl = servicesHelper.redirect(url, details.type, initiator, tabIdRedirects[details.tabId], details.incognito) + let newUrl = servicesHelper.redirect(url, details.type, originUrl, documentUrl, tabIdRedirects[details.tabId], details.incognito) if ( details.frameAncestors && @@ -103,7 +105,7 @@ browser.runtime.getPlatformInfo(r => { browser.tabs.query({ active: true, currentWindow: true }, async tabs => { if (tabs[0].url) { const url = new URL(tabs[0].url) - const newUrl = servicesHelper.redirect(url, "main_frame", null, true) + const newUrl = servicesHelper.redirect(url, "main_frame", null, null, true) if (newUrl) { browser.tabs.update(tabs[0].id, { url: newUrl }, () => { tabIdRedirects[tabs[0].id] = true @@ -209,7 +211,7 @@ browser.runtime.getPlatformInfo(r => { browser.tabs.query({ active: true, currentWindow: true }, async tabs => { if (tabs[0].url) { const url = new URL(tabs[0].url) - const newUrl = servicesHelper.redirect(url, "main_frame", null, true) + const newUrl = servicesHelper.redirect(url, "main_frame", null, null, true) if (newUrl) { browser.tabs.update(tabs[0].id, { url: newUrl }, () => { tabIdRedirects[tabs[0].id] = true @@ -226,7 +228,7 @@ browser.runtime.getPlatformInfo(r => { case "redirectLink": case "redirectLinkInNewTab": { const url = new URL(info.linkUrl) - const newUrl = servicesHelper.redirect(url, "main_frame", null, true) + const newUrl = servicesHelper.redirect(url, "main_frame", null, null, true) if (newUrl) { if (info.menuItemId == "redirectLink") browser.tabs.update({ url: newUrl }) else browser.tabs.create({ url: newUrl }) @@ -274,7 +276,7 @@ browser.runtime.getPlatformInfo(r => { case "redirectBookmarkInNewTab": browser.bookmarks.get(info.bookmarkId, bookmarks => { const url = new URL(bookmarks[0].url) - const newUrl = servicesHelper.redirect(url, "main_frame", null, true) + const newUrl = servicesHelper.redirect(url, "main_frame", null, null, true) if (newUrl) { if (info.menuItemId == "redirectBookmark") browser.tabs.update({ url: newUrl }) else browser.tabs.create({ url: newUrl }) @@ -328,7 +330,7 @@ browser.runtime.onMessage.addListener((request, sender, sendResponse) => { browser.tabs.query({ active: true, currentWindow: true }, async tabs => { if (tabs[0].url) { const url = new URL(tabs[0].url) - const newUrl = servicesHelper.redirect(url, "main_frame", null, true) + const newUrl = servicesHelper.redirect(url, "main_frame", null, null, true) if (newUrl) browser.tabs.update(tabs[0].id, { url: newUrl }, () => (tabIdRedirects[tabs[0].id] = true)) } })