Fix embedded video redirects

This commit is contained in:
SimonBrazell 2020-01-14 20:48:37 +11:00
parent 080ab9c45f
commit e272de67af
6 changed files with 25 additions and 45 deletions

View File

@ -5,7 +5,7 @@
A simple browser extension that redirects Twitter & Youtube requests to privacy friendly alternatives - [Nitter](https://github.com/zedeus/nitter) & [Invidious](https://github.com/omarroth/invidious). A simple browser extension that redirects Twitter & Youtube requests to privacy friendly alternatives - [Nitter](https://github.com/zedeus/nitter) & [Invidious](https://github.com/omarroth/invidious).
No unnecessary permissions required, only listens for and redirects requests made to twitter.com, www.twitter.com, mobile.twitter.com, youtube.com, www.youtube.com, youtube-nocookie.com, www.youtube-nocookie.com, and m.youtube.com, nothing else. Listens for and redirects requests made to `twitter.com`, `www.twitter.com`, `mobile.twitter.com`, `youtube.com`, `www.youtube.com`, `youtube-nocookie.com`, `www.youtube-nocookie.com`, and `m.youtube.com`.
Allows for setting custom [Nitter](https://github.com/zedeus/nitter/wiki/Instances) & [Invidious](https://github.com/omarroth/invidious/wiki/Invidious-Instances) instances and toggling redirects on & off. Allows for setting custom [Nitter](https://github.com/zedeus/nitter/wiki/Instances) & [Invidious](https://github.com/omarroth/invidious/wiki/Invidious-Instances) instances and toggling redirects on & off.

View File

@ -3,6 +3,7 @@
const nitterDefault = 'https://nitter.net'; const nitterDefault = 'https://nitter.net';
const invidiousDefault = 'https://invidio.us'; const invidiousDefault = 'https://invidio.us';
const youtubeRegex = /((www|m)\.)?youtube(-nocookie)?\.com/; const youtubeRegex = /((www|m)\.)?youtube(-nocookie)?\.com/;
const twitterRegex = /((www|mobile)\.)?twitter\.com/;
const pathRegex = /^https?:\/\/[^\/]+([\S\s]*)/; const pathRegex = /^https?:\/\/[^\/]+([\S\s]*)/;
let nitterInstance; let nitterInstance;
@ -12,7 +13,7 @@ let disableInvidious;
chrome.storage.sync.get( chrome.storage.sync.get(
['disableNitter', 'disableInvidious', 'nitterInstance', 'invidiousInstance'], ['disableNitter', 'disableInvidious', 'nitterInstance', 'invidiousInstance'],
(result) => { result => {
disableNitter = result.disableNitter; disableNitter = result.disableNitter;
disableInvidious = result.disableInvidious; disableInvidious = result.disableInvidious;
nitterInstance = result.nitterInstance || nitterDefault; nitterInstance = result.nitterInstance || nitterDefault;
@ -20,7 +21,7 @@ chrome.storage.sync.get(
} }
); );
chrome.storage.onChanged.addListener(function (changes) { chrome.storage.onChanged.addListener(changes => {
if ('nitterInstance' in changes) { if ('nitterInstance' in changes) {
nitterInstance = changes.nitterInstance.newValue || nitterDefault; nitterInstance = changes.nitterInstance.newValue || nitterDefault;
} }
@ -36,44 +37,30 @@ chrome.storage.onChanged.addListener(function (changes) {
}); });
chrome.webRequest.onBeforeRequest.addListener( chrome.webRequest.onBeforeRequest.addListener(
function (details) { details => {
let redirect;
if (details.url.match(youtubeRegex)) { if (details.url.match(youtubeRegex)) {
if (!disableInvidious) { if (!disableInvidious) {
return { redirect = {
redirectUrl: redirectUrl: invidiousInstance + details.url.match(pathRegex)[1]
invidiousInstance + details.url.match(pathRegex)[1]
}; };
} }
} else { } else if (details.url.match(twitterRegex)) {
if (!disableNitter) { if (!disableNitter) {
return { redirect = {
redirectUrl: redirectUrl: nitterInstance + details.url.match(pathRegex)[1]
nitterInstance + details.url.match(pathRegex)[1]
}; };
} }
} }
if (redirect) {
console.log('Redirecting', `"${details.url}"`, '=>', `"${redirect.redirectUrl}"`);
console.log('Details', details);
}
return redirect;
}, },
{ {
urls: [ urls: ["<all_urls>"],
"*://twitter.com/*", types: ['main_frame', 'sub_frame',]
"*://www.twitter.com/*",
"*://mobile.twitter.com/*",
"*://youtube.com/*",
"*://www.youtube.com/*",
"*://youtube-nocookie.com/*",
"*://www.youtube-nocookie.com/*",
"*://m.youtube.com/"
],
types: [
"main_frame",
"sub_frame",
"stylesheet",
"script",
"image",
"object",
"xmlhttprequest",
"other"
]
}, },
["blocking"] ['blocking']
); );

View File

@ -1,7 +1,7 @@
{ {
"name": "Privacy Redirect", "name": "Privacy Redirect",
"description": "Redirects Twitter & Youtube requests to privacy friendly alternatives (Nitter & Invidious).", "description": "Redirects Twitter & Youtube requests to privacy friendly alternatives (Nitter & Invidious).",
"version": "1.1.2", "version": "1.1.3",
"manifest_version": 2, "manifest_version": 2,
"background": { "background": {
"scripts": [ "scripts": [
@ -19,14 +19,7 @@
"storage", "storage",
"webRequest", "webRequest",
"webRequestBlocking", "webRequestBlocking",
"*://twitter.com/*", "<all_urls>"
"*://www.twitter.com/*",
"*://mobile.twitter.com/*",
"*://youtube.com/*",
"*://www.youtube.com/*",
"*://youtube-nocookie.com/*",
"*://www.youtube-nocookie.com/*",
"*://m.youtube.com/"
], ],
"browser_action": { "browser_action": {
"default_popup": "pages/popup/popup.html", "default_popup": "pages/popup/popup.html",

View File

@ -7,7 +7,7 @@ let invidiousInstance = document.querySelector('#invidiousInstance');
chrome.storage.sync.get( chrome.storage.sync.get(
['disableNitter', 'disableInvidious', 'nitterInstance', 'invidiousInstance'], ['disableNitter', 'disableInvidious', 'nitterInstance', 'invidiousInstance'],
(result) => { result => {
disableNitter.checked = !result.disableNitter; disableNitter.checked = !result.disableNitter;
disableInvidious.checked = !result.disableInvidious; disableInvidious.checked = !result.disableInvidious;
nitterInstance.value = result.nitterInstance || ''; nitterInstance.value = result.nitterInstance || '';

View File

@ -14,7 +14,7 @@
<img src="../../images/logo.png" alt="Privacy Redirect logo"> <img src="../../images/logo.png" alt="Privacy Redirect logo">
</div> </div>
<small> <small>
<span>Version</span>: 1.1.2</span> <span>Version</span>: 1.1.3</span>
</small> </small>
</header> </header>

View File

@ -17,9 +17,9 @@ chrome.storage.sync.get(
function debounce(func, wait, immediate) { function debounce(func, wait, immediate) {
let timeout; let timeout;
return function () { return () => {
let context = this, args = arguments; let context = this, args = arguments;
let later = function () { let later = () => {
timeout = null; timeout = null;
if (!immediate) func.apply(context, args); if (!immediate) func.apply(context, args);
}; };