This commit is contained in:
2026-05-01 18:39:20 -04:00
parent 819d2f277a
commit b7ddb55da3
4 changed files with 3382 additions and 102 deletions

3
.gitignore vendored
View File

@@ -1 +1,2 @@
node_modules node_modules
dist

63
main.js
View File

@@ -1,7 +1,16 @@
const { app, BrowserWindow, session } = require('electron/main') const { app, BrowserWindow, session } = require('electron');
const path = require('node:path') const path = require('node:path');
// Use require for consistency
const { ElectronBlocker } = require('@ghostery/adblocker-electron');
const fetch = require('cross-fetch');
const androidUA = 'Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.6167.164 Mobile Safari/537.36' const androidUA = 'Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.6167.164 Mobile Safari/537.36';
async function setupBlocker() {
const blocker = await ElectronBlocker.fromPrebuiltAdsAndTracking(fetch);
blocker.enableBlockingInSession(session.defaultSession);
console.log('Adblocker enabled');
}
const createWindow = () => { const createWindow = () => {
const win = new BrowserWindow({ const win = new BrowserWindow({
@@ -9,38 +18,38 @@ const createWindow = () => {
height: 800, height: 800,
webPreferences: { webPreferences: {
preload: path.join(__dirname, 'preload.js'), preload: path.join(__dirname, 'preload.js'),
contextIsolation: false, // Allows easier access to contentWindow contextIsolation: false,
nodeIntegration: true, nodeIntegration: true,
nodeIntegrationInSubFrames: true, nodeIntegrationInSubFrames: true,
webSecurity: false, // CRITICAL: Allows cross-origin history control webSecurity: false,
sandbox: false, // Disables the internal Electron sandbox sandbox: false,
webviewTag: true, // Add this! webviewTag: true,
} }
}) });
win.webContents.session.setUserAgent(androidUA) win.webContents.session.setUserAgent(androidUA);
win.maximize() // Maximize win.maximize();
win.loadFile('src/index.html') win.loadFile('src/index.html');
} }
app.whenReady().then(() => { app.whenReady().then(async () => {
const sess = session.defaultSession await setupBlocker();
const sess = session.defaultSession;
sess.webRequest.onBeforeSendHeaders((details, callback) => { sess.webRequest.onBeforeSendHeaders((details, callback) => {
details.requestHeaders['User-Agent'] = androidUA; details.requestHeaders['User-Agent'] = androidUA;
details.requestHeaders['Sec-CH-UA-Mobile'] = '?1'; details.requestHeaders['Sec-CH-UA-Mobile'] = '?1';
details.requestHeaders['Sec-CH-UA-Platform'] = '"Android"'; details.requestHeaders['Sec-CH-UA-Platform'] = '"Android"';
callback({ requestHeaders: details.requestHeaders }); callback({ requestHeaders: details.requestHeaders });
}); });
sess.webRequest.onHeadersReceived((details, callback) => { sess.webRequest.onHeadersReceived((details, callback) => {
const responseHeaders = { ...details.responseHeaders }; const responseHeaders = { ...details.responseHeaders };
const headersToRemove = ['x-frame-options', 'content-security-policy']; const keys = Object.keys(responseHeaders);
keys.forEach(key => {
Object.keys(responseHeaders).forEach(header => { if (['x-frame-options', 'content-security-policy'].includes(key.toLowerCase())) {
if (headersToRemove.includes(header.toLowerCase())) { delete responseHeaders[key];
delete responseHeaders[header];
} }
}); });
@@ -50,17 +59,13 @@ app.whenReady().then(() => {
}); });
}); });
createWindow() createWindow();
app.on('activate', () => { app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) { if (BrowserWindow.getAllWindows().length === 0) createWindow();
createWindow() });
} });
})
})
app.on('window-all-closed', () => { app.on('window-all-closed', () => {
if (process.platform !== 'darwin') { if (process.platform !== 'darwin') app.quit();
app.quit() });
}
})

3405
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -13,6 +13,17 @@
"devDependencies": { "devDependencies": {
"@types/electron": "^1.4.38", "@types/electron": "^1.4.38",
"@types/node": "^25.6.0", "@types/node": "^25.6.0",
"electron": "^41.3.0" "electron": "^41.3.0",
"electron-builder": "^26.8.1"
},
"dependencies": {
"@ghostery/adblocker-electron": "^2.14.4",
"cross-fetch": "^4.1.0"
},
"build": {
"linux": {
"target": ["AppImage", "deb", "tar.gz"],
"category": "Utility"
} }
} }
}