kiến thức Tổng hợp những addon chất cho Firefox / Chromium

Thím nào cài FF bản Tung của thì ko lo Mozilla bên mỹ lấy dữ liệu vì khi này Trung quốc sẽ thay thế mỹ làm cái đó. :matrix:
Hẳn ngài đã biết là apple, google vs mắc xoăn, gà béo từng cúi đầu xin xỏ sml vs anh Tập mới dc lê tý cái móng chân mới lết vô dc thị trường của trung hoa ko?
52x5XAQ.png

Như vậy là đủ hiểu chế độ bế quan toả cảng của raiden shotgun đối vs inazuma ko hề sai đâu, siêu bảo mật nữa là khác. Ở xứ của Tập soi data mà k hỏi anh Tập thì bít tết cũng thành thịt bê thui luôn nhoé
52x5XAQ.png
 
Hẳn ngài đã biết là apple, google vs mắc xoăn, gà béo từng cúi đầu xin xỏ sml vs anh Tập mới dc lê tý cái móng chân mới lết vô dc thị trường của trung hoa ko?
52x5XAQ.png

Như vậy là đủ hiểu chế độ bế quan toả cảng của raiden shotgun đối vs inazuma ko hề sai đâu, siêu bảo mật nữa là khác. Ở xứ của Tập soi data mà k hỏi anh Tập thì bít tết cũng thành thịt bê thui luôn nhoé
52x5XAQ.png
Nhưng mà tôi vẫn thích giãy chết hơn. Vì anh vẫn giãy giụa được. Chứ như abcxyz giãy giụa thì chỉ có headshot như vụ thiên an môn ấy. :shame:
càng kiểu bế quan toả cảng như tq thì nó càng chôm chỉa ăn cắp theo dõi mạnh.
 
jk dính fen ạ, do con ui chrome r, fix sao v fen.
UI đó chắc nó dùng tooltip kiểu tự làm, muốn xóa phải lội code dài lắm vì nó khá phức tạp, chắc cứ xài tạm mặc định hoặc tìm cách hóa bớt code mà có chữ tooltip đi xem. Đây có phải là cái đang dùng bởi trên mạng có hàng 10 cái giao diện Chrome cho Firefox ?
Hoặc có thể thử cái khác không bị lỗi:

Nhiều lác mắt luôn chả biết cái nào tốt nhất.
 
Thế nên tôi thà giao data vào tay tây lông chứ k bao h giao data vào tay k huwa :haha:
Bro xịn xò đấy. Tôi cũng có ông bạn làm dev, toàn lướt web bằng chrome, thậm chí méo dùng uBO hay bất cứ biện pháp chống leak hay privacy nào cả.
Đúng là toàn cao thủ, tay to có khác
uimGRxp.png
 
@anhdao1522 Vừa xem code, xóa thử dòng này, sửa file user-chrome.css không hoa hòe hoa cúc sâu trong thư mục chrome ấy:
Code:
.tabbrowser-tab:hover::after {
    animation-name: show-tooltip;
    animation-duration: var(--mf-medium-duration);
    animation-timing-function: var(--mf-point-to-point);
    animation-fill-mode: forwards;
    animation-delay: .75s
}

@keyframes show-tooltip {
    from {
        opacity: 0;
        transform: scale(0.9)
    }

    to {
        transform: scale(1);
        opacity: 1
    }
}

Nó chơi tooltip tự chế 100%.

Code mới:
Code
 
Last edited by a moderator:
Bro xịn xò đấy. Tôi cũng có ông bạn làm dev, toàn lướt web bằng chrome, thậm chí méo dùng uBO hay bất cứ biện pháp chống leak hay privacy nào cả.
Đúng là toàn cao thủ, tay to có khác
uimGRxp.png
Nói thẳng ra đám cty big mẽo nó còn có tí nguyên tắc. Chứ như bên anh hai. Cứ thử xem có bay màu như jackma ko. Láo nháo thì chỉ có ăn cháo.
 
Nhờ kỹ sư Firefox @ndv92 cả đó, của một đồng công một nén cái code nhìn không hề đơn giản 😔
Gì thế ngài. Sao ngài nay khiêm tốn thế. Hacker từng làm tay trong cho CIA mà nay sao suy thế rồi hả ngài? Code của ngài xịn xò, kiến thức thâm sâu uyên bác hơn anh xtanh, đến cái #1 mà tôi còn nhấm nháp chưa hết đây này. Bởi vì tri thức cấm của vũ trụ quá nhiều và áp đảo khiến tôi phải từ từ mà thôn phệ. Sugoiii ah~~
IvK38JC.png
 
không biết tháng 6 này mấy anh Tàu có đổi trình duyệt không nhỉ, thấy trình duyệt mấy ảnh toàn hàng cũ như lấy nhân chrome 119,... không. Mà bên đó quảng cáo lắm vc:ah:
 
không biết tháng 6 này mấy anh Tàu có đổi trình duyệt không nhỉ, thấy trình duyệt mấy ảnh toàn hàng cũ như lấy nhân chrome 119,... không. Mà bên đó quảng cáo lắm vc:ah:
Thời xưa Firefox từng nổi bên Tàu lắm, giờ họ dùng trình duyệt dựa trên nhân Chrome rồi 😔
 
Hẳn ngài đã biết là apple, google vs mắc xoăn, gà béo từng cúi đầu xin xỏ sml vs anh Tập mới dc lê tý cái móng chân mới lết vô dc thị trường của trung hoa ko?
Như vậy là đủ hiểu chế độ bế quan toả cảng của raiden shotgun đối vs inazuma ko hề sai đâu, siêu bảo mật nữa là khác. Ở xứ của Tập soi data mà k hỏi anh Tập thì bít tết cũng thành thịt bê thui luôn nhoé
Trung Quốc khốn nạn hơn Mỹ nha, nói thì phải để ý nữa. Mỹ nó theo dõi nhưng hầu như ko bắt giam hay làm gì mình là tự do rồi. Tư bản chỉ cần tiền nên nó nhượng bộ trung quốc là bình thường, thời Pooh sau này là đồ mỹ dẹp hết rồi trừ cái bing nên bắt buộc chơi đồ bị kiểm duyệt thì nó khác ,cho nên tìm hiểu rồi mới nói.
 
Mình ở 3 năm ở trung quốc rồi (2008, 2011, 2015) nên biết rất rõ, trong khoảng từ 2008 đến 2010 thời Đào là tự do nhất, từ thời pooh là mình ớn tới già, kiểm duyệt 1 cách điên rồ, có lần xém bị bắt vì hàm ý (rất bình thường ở Tàu sau này nha), sau này thêm cái kiểm duyệt từng comment của công dân mới tởm:too_sad:
 
Tắt cái image edition đi là ok thầy ơi, cũng cải thiện tốc độ đáng kể khi áp vào những trang đọc truyện
Giờ mới để ý thằng này chơi cache Dark Mode như Chrome, một khi cache rồi lần tải trang sau sẽ gần như không bị trễ do Dark Mode, tắt cái Image Edition là ngon.
 
Dành cho bác nào thích dùng 1 cái handle bên ngoài để dùng mpv từ trình duyệt nhé. Mềnh modify lại mấy thứ để dùng kiểu chuột phải để mở bằng mpv các kiểu theo như sở thích của mềnh, hỗ trợ cả streamlink luôn.
Còn đây là script để dùng với cái phía trên.
Code:
// ==UserScript==
// @name         Open with MPV
// @version      1.0.7
// @author       Ranko
// @description  Open video/stream with MPV
// @require      https://openuserjs.org/src/libs/sizzle/GM_config.js
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_registerMenuCommand
// @grant        GM_xmlhttpRequest
// @match        *://*/*
// @run-at       document-start
// @run-at       context-menu
// ==/UserScript==

(function() {
    'use strict';

    let config_id = 'open-with-mpv';

    const match_url = [
        /www.youtube.com\/(?:watch|playlist)/,
        /twitch.tv\/.+/,
        /www.douyu.com\/.+/,
        /www.bilibili.com\/video/,
        /live.bilibili.com\/.+/,
    ];

    let frame_css = `
        position: fixed;
        z-index: 99999;
        width: 360px;
        height: 280px;
        border: 1px solid;
    `;

    let config_css = `
        body {
            display: flex;
            justify-content: center;
        }
        #${config_id} .config_header {
            color: color-mix(in srgb, currentColor 13%, -moz-Dialog) !important;
        }
        #${config_id}_resetLink {
            color: color-mix(in srgb, currentColor 13%, -moz-Dialog) !important;
        }
        #${config_id} .field_label {
            display: inline-block;
            width: 120px;
            color: color-mix(in srgb, currentColor 13%, -moz-Dialog) !important;
        }
        #${config_id}_field_cookies {
            width: 150px;
        }
        #${config_id}_field_quality,
        #${config_id}_field_v_codec,
        #${config_id}_field_st_quality {
            width: 90px;
        }
    `;

    GM_config.init({
        id: config_id,
        title: GM_info.script.name + ' Settings',
        css: config_css.trim(),
        fields: {
            referer: {
                label: 'Pass Referer',
                type: 'checkbox',
                default: false,
            },
            cookies: {
                label: 'Youtube Cookies',
                type: 'text',
                default: '',
            },
            quality: {
                label: 'Youtube Quality',
                type: 'select',
                options: ["default", "2160p", "1440p", "1080p", "720p", "480p", "360p"],
                default: 'default',
            },
            v_codec: {
                label: 'Youtube Codec',
                type: 'select',
                options: ["default", "av01", "vp9", "h265", "h264"],
                default: 'default',
            },
            st_quality: {
                label: 'Streamlink Quality',
                type: 'select',
                options: ["best", "1080p", "720p", "480p", "360p", "worst"],
                default: 'best',
            },
            open_chat: {
                label: 'Open chat',
                type: 'checkbox',
                default: false,
            }
        },
        events: {
            save: () => {
                let cookies = GM_config.get("cookies").trim();
                if (cookies === '') {
                    GM_config.set("cookies", '');
                } else {
                    GM_config.set("cookies", cookies);
                }
            }
        }
    })

    function btoaUrl(url) {
        return btoa(url).replace(/\//g, "_").replace(/\+/g, "-").replace(/\=/g, "");
    }

    function genMPVLink(url, type) {
        let referer     = GM_config.get("referer");
        let cookies     = GM_config.get("cookies").trim();
        let quality     = GM_config.get("quality").toLowerCase();
        let v_codec     = GM_config.get("v_codec").toLowerCase();
        let st_quality  = GM_config.get("st_quality").toLowerCase();

        let proto = 'mpv://' + type + '/' + btoaUrl(url);
        let options = [];

        if (referer) {
            options.push("referer=" + btoaUrl(location.href));
        }

        if (type == 'play') {
            if (cookies !== "") {
                options.push("cookies=" + cookies);
            }

            if (quality !== "default") {
                options.push("quality=" + quality);
            }

            if (v_codec !== "default") {
                options.push("v_codec=" + v_codec);
            }
        } else if (type == 'stream') {
            options.push("quality=" + st_quality);
        } else if (type == 'pipe') {
            //
        }

        if (options.length !== 0) {
            proto += "/?";

            options.forEach((option, index) => {
                proto += option;

                if (index + 1 !== options.length) {
                    proto += "&";
                }
            });
        }

        return proto;
    }

    function matchUrl(url) {
        return match_url.some(regex => regex.test(url));
    }

    function getParentByTagName(e, tagName) {
        tagName = tagName.toLowerCase();
        if (e.tagName.toLowerCase() == tagName) {
            return e;
        }
        while (e && e.parentNode) {
            e = e.parentNode;
            if (e.tagName && e.tagName.toLowerCase() == tagName) {
            return e;
            }
        }
        return "undefined";
    }

    function openHandle(type) {
        var l = GM_getValue("URL", null);
        console.log("link:" + l);
        var mlink = null;
        if (l !== null) {

            let open_chat = GM_config.get("open_chat");
            if (open_chat) { livechatOpen(l); }

            mlink = genMPVLink(l, type);

            GM_setValue("URL", null);
            console.log(mlink);

            location.href = mlink;
        }
    }

    function openMPV() {
        openHandle('play');
    }

    function openStreamlink() {
        openHandle('stream');
    }

    function openPip() {
        openHandle('pipe');
    }

    function getLink(e) {
        if (e.buttons == 2) {
            var l = null;
            var target = getParentByTagName(e.target, "A").href;
            console.log(document.href);
            if(matchUrl(target)) {
                l = target;
            } else if (matchUrl(location.href)) {
                l = location.href;
            }
            if (l !== null) {
                //Remove param dyshci in douyu
                var cr_url = new URL(l);
                if (cr_url.href.indexOf('www.douyu.com')) {
                    cr_url.searchParams.delete('dyshci');
                    l = cr_url.href;
                }
                console.log(l);
            }
            GM_setValue("URL", l);
        }
    }

    function getYouTubeVideoId(url) {
        const regex_id = /[?&]v=([^#&?]*).*/;
        const match = url.match(regex_id);
        return match ? match[1] : null;
    }

    function checkYouTubeLiveStatus(url) {
        const videoId = getYouTubeVideoId(url);

        return new Promise((resolve, reject) => {
            const apiKey = 'AIzaSyBlCwCvXzxf2gpD5sHJRKhgJs7FOTeaXsg';
            const apiUrl = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${apiKey}&part=liveStreamingDetails`;

            GM_xmlhttpRequest({
                method: 'GET',
                url: apiUrl,
                onload: function(response) {
                    try {
                        const data = JSON.parse(response.responseText);
                        const liveDetails = data.items[0].liveStreamingDetails;
                        const isLiveStream = liveDetails && liveDetails.concurrentViewers;
                        resolve(isLiveStream);
                    } catch (error) {
                        reject(error);
                    }
                },
                onerror: function(error) {
                    reject(error);
                }
            });
        });
    }

    function popoutChat(url) {
        window.open(url, "", "fullscreen=no,toolbar=no,titlebar=no,menubar=no,location=no,width=400,height=600");
    }

    function livechatOpen(url) {
        var cur_url = new URL(url);
        if (cur_url.href.indexOf('youtube.com/watch') != -1) {
            checkYouTubeLiveStatus(cur_url.href)
                .then(isLiveStream => {
                    if (isLiveStream !== undefined) {
                        console.log('Is live stream:', isLiveStream);
                        popoutChat("https://www.youtube.com/live_chat?is_popout=1&v=" + cur_url.search.split("v=")[1]);
                    }
                })
                .catch(error => {
                    console.error('Error:', error);
                });
        } else if (cur_url.href.match('https://.*?.twitch.tv/.')) {
            popoutChat("https://www.twitch.tv/popout" + cur_url.pathname + "/chat?popout=");
        }
    }

    document.addEventListener('mousedown', getLink, false);
    GM_registerMenuCommand("Open with MPV", openMPV);
    GM_registerMenuCommand("Open with Streamlink", openStreamlink);
    GM_registerMenuCommand("Open with Pipe", openPip);
    GM_registerMenuCommand('Settings', () => {
        GM_config.open();
        GM_config.frame.style = frame_css.trim();
    });
})();
 
Vừa thử tắt WebGL đi chơi game thì tốc độ giảm còn... 1/100:
Tắt:

Bật:

May mà script này cân team được, ngoại lệ phát vẫn tắt được WebGL giảm tỉ lệ bị theo dõi mà vẫn chơi game max sờ bít 😔
 
Vừa thử tắt WebGL đi chơi game thì tốc độ giảm còn... 1/100:
Tắt:

Bật:

May mà script này cân team được, ngoại lệ phát vẫn tắt được WebGL giảm tỉ lệ bị theo dõi mà vẫn chơi game max sờ bít 😔
Firefox cái hiệu năng liên quan đến cái này tệ vch.
 
Back
Top