letsmain / 奈飞Netflix自由访问&网络加速,畅享无限流媒体娱乐!

// ==UserScript==
// @name         奈飞Netflix自由访问&网络加速,畅享无限流媒体娱乐!
// @namespace    Netflix-Access-Assistant
// @version      1.1.9
// @description  自由浏览并尽情享受全球领先的流媒体平台Netflix。无论您身处哪个国家或地区,这个脚本将为您打开通往Netflix的大门,让您畅快观赏各类热门电影、剧集、纪录片和原创内容,绕过Netflix浏览/自由访问Netflix脚本/突破网络封锁的流媒体观看工具/Netflix自由浏览插件/代理Netflix脚本/油猴脚本Netflix解封器/浏览被封锁脚本,您将能够无缝地浏览、搜索并观看来自全球的精彩内容,欣赏各类影片的高清画质和震撼音效。该脚本支持多语言功能,让您能够以中英文等多种语言欣赏影视作品。
// @author       Netflix-Access-Assistant
// @icon         data:image/png;base64,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
// @resource     logo data:image/png;base64,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
// @require      http://cdn.staticfile.org/jquery/1.12.0/jquery.min.js
// @supportURL   http://letsmain.com/netflix-access-master?utm_source=openuserjs
// @include      *://*.netflix.com/*
// @match        *://www.netflix.com/*
// @include      *://*.bing.com/*
// @include      *://*.yandex.com/*
// @include      *://*.duckduckgo.com/*
// @include      *://*.baidu.com/*
// @include      *://*.sogou.com/*
// @include      *://*.so.com/*
// @include      *://*.sm.cn/*
// @include      *://*.startpage.com/*
// @include      *://*.fsoufsou.com/*
// @include      *://*.deepl.com/*
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_download
// @grant        GM_addStyle
// @grant        GM_openInTab
// @grant        unsafeWindow
// @run-at       document-idle
// @run-at       document-start
// @grant        GM_setClipboard
// @grant        GM_getResourceURL
// @grant        GM_getResourceURL
// @grant        GM_getResourceText
// @grant        GM_xmlhttpRequest
// @compatible	 Chrome
// @compatible	 Edge
// @compatible	 Firefox
// @compatible	 Safari
// @compatible	 Opera
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';
    var $ = window.jQuery;
    if (!$) {
        var script = document.createElement('script');
        script.src = 'https://code.jquery.com/jquery-3.6.1.min.js';
        document.head.appendChild(script);
        $ = window.jQuery;
    }
    var currentUrl = window.location.href;
    var currentHost = window.location.host;
    var resourceAnalysis = {};
    resourceAnalysis.addHtml = function() {
        var logoImgUrl = GM_getResourceURL('logo');
        var floatBoxHtml = '<div style="position:fixed;z-index:1076134;cursor:pointer;top:68px;left:0px;">' +
            '<div id="access-helper-wrap" style="width:136px;height:28px;line-height:28px;text-align:center;font-size:12px;color:#fff;background-color:#7C3AED;border:1px solid #7C3AED;border-left:none;border-top-right-radius:5px;border-bottom-right-radius:5px;">' +
            '<img src="' + logoImgUrl + '" style="width:20px;height:20px;position:relative;top:5px;" />&nbsp;Netflix访问助手' +
            '</div>' +
            '<div id="access-helper-url-wrap" style="font-size:12px;padding:6px 4px;">' +
            '<a href="http://letsmain.com/netflix-access-master?utm_source=greasyfork-recommend" target="_blank" style="color:#3b8cff;text-decoration:none">http://letsmain.com/netflix-access-master</a>' +
            '</div>' +
            '</div>';
        $('body').append(floatBoxHtml);
        var defaultVipUrl = 'http://letsmain.com/netflix-access-master?utm_source=greasyfork-recommend&invitation-code=#';
        $('body').on('click', '#access-helper-wrap', function() {
            defaultVipUrl = defaultVipUrl.replace(/#/g, encodeURIComponent(currentUrl));
            window.open(defaultVipUrl, '_blank');
        });
    };
    resourceAnalysis.init = function() {
        resourceAnalysis.addHtml();
    };
    resourceAnalysis.init();
    const options = {
        hookEvents: ["contextmenu", "select", "selectstart", "copy", "cut", "dragstart"],
        unhookEvents: ["mousedown", "mouseup", "keydown", "keyup"],
        doms: true,
        hookAddEventListener: true,
        hookPreventDefault: true,
        addCss: true,
        iframeSrc: "about:blank",
    };
    const shouldNotHook = (event) => !!event.closest("form");
    const clearEvents = () => {
        const targets = [
                document,
                document.body,
                ...document.getElementsByTagName("div"),
            ];
        const iframe = document.querySelector(`iframe[src="${options.iframeSrc}"]`);
        if (
            iframe &&
            iframe.clientWidth > 99 &&
            iframe.clientHeight > 11
        ) {
            targets.push(
                iframe.contentWindow.document,
                iframe.contentWindow.document.body
            );
        }
        for (const target of targets) {
            if (!target) continue;
            for (const eventType of options.hookEvents.concat(options.unhookEvents)) {
                const prop = "on" + eventType;
                target[prop] = null;
            }
        }
    };
    const hookEvents = (originalAddEventListener) => {
        const newAddEventListener = function (type, listener, options) {
            const useCapture =
                typeof options === "boolean" ? options : options && options.capture;
            if (!options.hookEvents.includes(type)) {
                originalAddEventListener.call(this, type, listener, useCapture);
            } else {
                originalAddEventListener.call(this, type, (e) => {
                    if (shouldNotHook(e) || !options.hookEvents.includes(e.type)) {
                    e.preventDefault();
                } else {
                    listener(e);
                }
            }, useCapture);
        }
    };
    EventTarget.prototype.addEventListener = newAddEventListener;
    document.addEventListener = newAddEventListener;
};
const hookPreventDefault = (originalPreventDefault, eventNames) => {
    Event.prototype.preventDefault = function () {
        if (shouldNotHook(this) || !eventNames.includes(this.type)) {
            originalPreventDefault.call(this);
        }
    };
};
const addCss = () => {
    GM_addStyle(`
    html, * {
        -webkit-user-select: text !important;
        -moz-user-select: text !important;
        user-select: text !important;
    }

::-moz-selection {
        color: #FFF!important;
        background: #3399FF!important;
    }

::selection {
        color: #FFF!important;
        background: #3399FF!important;
    }
  `);
};
const init = () => {
    if (options.doms) {
        setInterval(clearEvents, 9000);
        setTimeout(clearEvents, 1000);
        window.addEventListener("load", clearEvents, true);
    }
    if (options.hookAddEventListener) {
        hookEvents(EventTarget.prototype.addEventListener);
    }
    if (options.hookPreventDefault) {
        hookPreventDefault(
            Event.prototype.preventDefault,
            options.hookEvents.concat(options.unhookEvents)
        );
    }
    if (options.addCss) {
        addCss();
    }
};
init();
})();