Greasy Fork is available in English.
Enable dolby plus audio and more video on Netflix
当前为
// ==UserScript==
// @name Netflix Plus
// @namespace http://tampermonkey.net/
// @version 1.1
// @description Enable dolby plus audio and more video on Netflix
// @author TGSAN
// @match https://www.netflix.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=netflix.com
// @run-at document-start
// @grant none
// ==/UserScript==
(() => {
"use strict";
const Event = class {
constructor(script, target) {
this.script = script;
this.target = target;
this._cancel = false;
this._replace = null;
this._stop = false;
}
preventDefault() {
this._cancel = true;
}
stopPropagation() {
this._stop = true;
}
replacePayload(payload) {
this._replace = payload;
}
};
let callbacks = [];
window.addBeforeScriptExecuteListener = (f) => {
if (typeof f !== "function") {
throw new Error("Event handler must be a function.");
}
callbacks.push(f);
};
window.removeBeforeScriptExecuteListener = (f) => {
let i = callbacks.length;
while (i--) {
if (callbacks[i] === f) {
callbacks.splice(i, 1);
}
}
};
const dispatch = (script, target) => {
if (script.tagName !== "SCRIPT") {
return;
}
const e = new Event(script, target);
if (typeof window.onbeforescriptexecute === "function") {
try {
window.onbeforescriptexecute(e);
} catch (err) {
console.error(err);
}
}
for (const func of callbacks) {
if (e._stop) {
break;
}
try {
func(e);
} catch (err) {
console.error(err);
}
}
if (e._cancel) {
script.textContent = "";
script.remove();
} else if (typeof e._replace === "string") {
script.textContent = e._replace;
}
};
const observer = new MutationObserver((mutations) => {
for (const m of mutations) {
for (const n of m.addedNodes) {
dispatch(n, m.target);
}
}
});
observer.observe(document, {
childList: true,
subtree: true,
});
window.globalOptions = {
useallSub: true,
useddplus: true,
useAVC: false,
useFHD: true,
usedef: false,
useHA: true,
useAVCH: false,
usevp9: false,
useav1: false,
useprk: true,
usehevc: false,
usef4k: true,
usef12k: false,
closeimsc: true,
setMaxBitrate: true
};
window.onbeforescriptexecute = function (e) {
let scripts = document.getElementsByTagName("script");
if (scripts.length === 0) return;
for (let i = 0; scripts.length > i; i++) {
let dom = scripts[i];
if (dom.src.includes("cadmium-playercore")) {
let playercore = document.createElement('script');
playercore.src = "https://static-os.kumo.moe/js/netflix/cadmium-playercore.js";
playercore.crossOrigin = dom.crossOrigin;
playercore.async = dom.async;
playercore.id = dom.id;
document.head.appendChild(playercore);
let maxbitrate = document.createElement('script');
maxbitrate.src = 'https://static-os.kumo.moe/js/netflix/max-bitrate.js';
maxbitrate.crossOrigin = dom.crossOrigin;
maxbitrate.async = dom.async;
maxbitrate.id = dom.id;
document.head.appendChild(maxbitrate);
dom.remove();
window.onbeforescriptexecute = null;
break;
}
}
};
})();