mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-10 10:11:46 +00:00
@ -1,3 +1,5 @@
|
||||
import { contextBridge, webFrame } from 'electron';
|
||||
|
||||
import { blockers } from './types';
|
||||
import { createPlugin } from '@/utils';
|
||||
import {
|
||||
@ -107,31 +109,25 @@ export default createPlugin({
|
||||
},
|
||||
},
|
||||
preload: {
|
||||
script: 'window.JSON = window._proxyJson; window._proxyJson = undefined; window.Response = window._proxyResponse; window._proxyResponse = undefined; 0',
|
||||
async start({ getConfig }) {
|
||||
const config = await getConfig();
|
||||
|
||||
if (config.blocker === blockers.WithBlocklists) {
|
||||
// Preload adblocker to inject scripts/styles
|
||||
await injectCliqzPreload();
|
||||
} else if (config.blocker === blockers.InPlayer && !isInjected()) {
|
||||
inject(contextBridge);
|
||||
await webFrame.executeJavaScript(this.script);
|
||||
}
|
||||
},
|
||||
async onConfigChange(newConfig) {
|
||||
if (newConfig.blocker === blockers.WithBlocklists) {
|
||||
await injectCliqzPreload();
|
||||
} else if (newConfig.blocker === blockers.InPlayer && !isInjected()) {
|
||||
inject(contextBridge);
|
||||
await webFrame.executeJavaScript(this.script);
|
||||
}
|
||||
},
|
||||
},
|
||||
renderer: {
|
||||
async start({ getConfig }) {
|
||||
const config = await getConfig();
|
||||
if (config.blocker === blockers.InPlayer && !isInjected()) {
|
||||
inject();
|
||||
}
|
||||
},
|
||||
onConfigChange(newConfig) {
|
||||
if (newConfig.blocker === blockers.InPlayer && !isInjected()) {
|
||||
inject();
|
||||
}
|
||||
},
|
||||
}
|
||||
});
|
||||
|
||||
4
src/plugins/adblocker/injectors/inject.d.ts
vendored
4
src/plugins/adblocker/injectors/inject.d.ts
vendored
@ -1,3 +1,5 @@
|
||||
export const inject: () => void;
|
||||
import type { ContextBridge } from 'electron';
|
||||
|
||||
export const inject: (contextBridge: ContextBridge) => void;
|
||||
|
||||
export const isInjected: () => boolean;
|
||||
|
||||
@ -12,7 +12,11 @@ let injected = false;
|
||||
|
||||
export const isInjected = () => injected;
|
||||
|
||||
export const inject = () => {
|
||||
/**
|
||||
* @param {Electron.ContextBridge} contextBridge
|
||||
* @returns {*}
|
||||
*/
|
||||
export const inject = (contextBridge) => {
|
||||
injected = true;
|
||||
{
|
||||
const pruner = function (o) {
|
||||
@ -28,17 +32,37 @@ export const inject = () => {
|
||||
return o;
|
||||
};
|
||||
|
||||
JSON.parse = new Proxy(JSON.parse, {
|
||||
apply() {
|
||||
return pruner(Reflect.apply(...arguments));
|
||||
},
|
||||
contextBridge.exposeInMainWorld('_proxyJson', {
|
||||
parse: new Proxy(JSON.parse, {
|
||||
apply() {
|
||||
return pruner(Reflect.apply(...arguments));
|
||||
},
|
||||
}),
|
||||
stringify: JSON.stringify,
|
||||
[Symbol.toStringTag]: JSON[Symbol.toStringTag],
|
||||
});
|
||||
|
||||
const withPrototype = (obj) => {
|
||||
const protos = Object.getPrototypeOf(obj);
|
||||
for (const [key, value] of Object.entries(protos)) {
|
||||
if (Object.prototype.hasOwnProperty.call(obj, key)) continue;
|
||||
if (typeof value === 'function') {
|
||||
obj[key] = function (...args) {
|
||||
return value.call(obj, ...args);
|
||||
}
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
|
||||
Response.prototype.json = new Proxy(Response.prototype.json, {
|
||||
apply() {
|
||||
return Reflect.apply(...arguments).then((o) => pruner(o));
|
||||
},
|
||||
});
|
||||
contextBridge.exposeInMainWorld('_proxyResponse', withPrototype(Response));
|
||||
}
|
||||
|
||||
(function () {
|
||||
|
||||
Reference in New Issue
Block a user