diff options
author | SimonBrazell <simon@brazell.com.au> | 2020-03-31 14:57:36 +1100 |
---|---|---|
committer | SimonBrazell <simon@brazell.com.au> | 2020-03-31 15:00:44 +1100 |
commit | 9a5a3779b40decff8e271f052a8d447c04bab897 (patch) | |
tree | 47cd463ea5797accfa74f343e361ed2d30684bec /background.js | |
parent | Fix #31 - Add Firefox screenshots (diff) | |
download | libredirect-9a5a3779b40decff8e271f052a8d447c04bab897.zip |
Fix #30 - 'View on ...' links, & handle more maps embed cases
Diffstat (limited to 'background.js')
-rw-r--r-- | background.js | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/background.js b/background.js index 4811994f..33ff7a8b 100644 --- a/background.js +++ b/background.js @@ -145,10 +145,13 @@ function addressToLatLng(address, callback) { xmlhttp.send(); } -function redirectYouTube(url, type) { +function redirectYouTube(url, initiator, type) { if (disableInvidious) { return null; } + if (initiator && (initiator.origin === invidiousInstance || youtubeDomains.includes(initiator.host))) { + return null; + } if (url.pathname.match(/iframe_api/)) { // Redirect requests for YouTube Player API to local files instead return browser.runtime.getURL('assets/iframe_api.js'); @@ -170,10 +173,13 @@ function redirectYouTube(url, type) { } } -function redirectTwitter(url) { +function redirectTwitter(url, initiator) { if (disableNitter) { return null; } + if (initiator && (initiator.origin === nitterInstance || twitterDomains.includes(initiator.host))) { + return null; + } if (url.host.split('.')[0] === 'pbs') { return `${nitterInstance}/pic/${encodeURIComponent(url.href)}`; } else if (url.host.split('.')[0] === 'video') { @@ -183,10 +189,13 @@ function redirectTwitter(url) { } } -function redirectInstagram(url) { +function redirectInstagram(url, initiator) { if (disableBibliogram) { return null; } + if (initiator && (initiator.origin === bibliogramInstance || initiator.host.match(instagramRegex))) { + return null; + } if (url.pathname === '/' || url.pathname.match(instagramPathsRegex)) { return `${bibliogramInstance}${url.pathname}${url.search}`; } else { @@ -217,7 +226,19 @@ function redirectGoogleMaps(url) { params = `${params}&layers=${layers[url.searchParams.get('layer')] || layers['none']}`; // Handle Google Maps Embed API if (url.pathname.includes('/embed')) { - const query = url.searchParams.get('q') || url.searchParams.get('query'); + let query = ''; + if (url.searchParams.has('q')) { + query = url.searchParams.get('q'); + } else if (url.searchParams.has('query')) { + query = url.searchParams.has('query'); + } else if (url.searchParams.has('pb')) { + try { + query = url.searchParams.get('pb').split(/!2s(.*?)!/)[1]; + } catch (error) { + console.error(error); + // Unable to find map marker in URL. + } + } let marker, bbox; addressToLatLng(query, (coords, boundingbox) => { marker = coords; @@ -267,18 +288,19 @@ function redirectGoogleMaps(url) { browser.webRequest.onBeforeRequest.addListener( details => { const url = new URL(details.url); + let initiator = details.initiator && new URL(details.initiator); let redirect; if (youtubeDomains.includes(url.host)) { redirect = { - redirectUrl: redirectYouTube(url, details.type) + redirectUrl: redirectYouTube(url, initiator, details.type) }; } else if (twitterDomains.includes(url.host)) { redirect = { - redirectUrl: redirectTwitter(url) + redirectUrl: redirectTwitter(url, initiator) }; } else if (url.host.match(instagramRegex)) { redirect = { - redirectUrl: redirectInstagram(url) + redirectUrl: redirectInstagram(url, initiator) }; } else if (url.href.match(googleMapsRegex)) { redirect = { |