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

nhanh hơn chứ nhỉ, cả 2 khâu calculate layout và paint canvas đều cần ít thông tin hơn, dùng ít cache hơn :amazed:
Cháu ngoan Bác Hồ cứ khiêm tốn thôi.

Thử trò tắt font xem, cá nhân mình thì thấy nhanh hơn, cũng dễ hiểu khi không phải render nhiều hơn 3 font, nghĩa là chỉ: Arial, Time New Roman và Consolas (trên Windows), ngoài ra tăng riêng tư khi trang web bị hạn chế số font họ scan được từ mình.

1695829667238.png


Cơ mà đẹp hơn thì nên để Time New Roman thành Arial vì thằng kia xấu khó nhìn:
1695829789640.png


Nếu là Android hoặc quen about:config thì làm như sau:
font.name.serif.x-westernArial
browser.display.use_document_fonts0

Không hề xấu đi nhé mà thậm chí khiến trang web đẹp hơn, đặc biệt ở Vâu này font mặc định xấu vê lù.

Thực tế nhìn như này:

Xem thêm:
 
Last edited:
Chụp mình phát cái debug để sau này có dữ liệu tham khảo cái có gì hoàn thiện luôn, sửa phần này bật debug là ok :D

Thấy nó có MacPorts, chả biết khác gì không ?

local function getOS()
local BinaryFormat = package.cpath
print(BinaryFormat)
if BinaryFormat:match("dll$") then
return "Windows"
elseif BinaryFormat:match("so$") then
if BinaryFormat:match("homebrew") then
return "MacOS"
else
return "Linux"
end
elseif BinaryFormat:match("dylib$") then
return "MacOS"
end
end

Đây nhé mike fence :byebye:
Code:
[protocol_hook] /Users/djinn/Desktop/homebrew/lib/lua/5.1/?.so;/Users/djinn/Desktop/homebrew/lib/lua/5.1/loadall.so
 
Cho mình hỏi trên Firefox android beta làm sao add được thêm số dòng cho shortcut item ở new page được nhỉ? Hiện giờ nó cho có 2 dòng, mà mình muốn chỉnh lên 5.

Mình có tìm được hướng dẫn này nhưng không có tác dụng

Vẫn cần support cái này từ các cao thủ
 
Ơ hôm nay Ice Raven 2.10.1 nó khóa cmn about:config hả các fen?
Chắc nó build nhầm trên bản Firefox stable rồi, sắp tới thằng này cũng không còn đặc sắc gì nữa nếu Firefox Android bật 100% addon.

Vẫn cần support cái này từ các cao thủ
Cái này khó đó vì Firefox Android tùy biến về giao diện gần như là con số 0 tròn trĩnh, nếu dùng Ice Raven có thể bảo họ nâng lên qua việc chỉnh sửa mã nguồn chứ bản Android tù hơn nhiều PC ở thời điểm hiện tại.
 
Chắc nó build nhầm trên bản Firefox stable rồi, sắp tới thằng này cũng không còn đặc sắc gì nữa nếu Firefox Android bật 100% addon.


Cái này khó đó vì Firefox Android tùy biến về giao diện gần như là con số 0 tròn trĩnh, nếu dùng Ice Raven có thể bảo họ nâng lên qua việc chỉnh sửa mã nguồn chứ bản Android tù hơn nhiều PC ở thời điểm hiện tại.
Thanks ngài. T cũng dùng song song cả FF trên PC và Android thì thấy đúng Android vẫn ít tùy chỉnh quá. Nhưng thời buổi bây giờ cái phone nó kè kè với mình cả ngày nên cũng muốn chỉnh cho nó đủ tiện dụng.
 
Thanks ngài. T cũng dùng song song cả FF trên PC và Android thì thấy đúng Android vẫn ít tùy chỉnh quá. Nhưng thời buổi bây giờ cái phone nó kè kè với mình cả ngày nên cũng muốn chỉnh cho nó đủ tiện dụng.
Có một giải pháp méo mó khác là vào Customize Homepage rồi tắt mục Shortcuts này đi rồi dùng mục Bookmark sau đó tạo nhiều thư mục bookmark theo chủ đề rồi quản lý nó từ Homepage -> See all, ví dụ:

JiTquXM.png

m5wfPJc.png

Đối với mình là dùng được, vì cũng thích cửa sổ Homepage nhìn nó gọn và không lộ nhiều thông tin.

Cá nhân mình thấy thì Bookmark hay Shortcut cũng là một, toàn bỏ bớt 1 cái đi cho tiện quản.
 
Sửa lại script trên greasyfork để click vào thumbnail thì mở youtube bằng mpv, còn click vào tên thì mở trong trình duyệt
JavaScript:
// ==UserScript==
// @name        Click on video thumbnail to play in MPV
// @name:ru     Нажми на митиатюру для проигрывания в MPV
// @namespace   nsinister.scripts.videothumb2mpv
// @match       https://*.youtube.com/*
// @match       https://vimeo.com/*
// @grant       none
// @version     0.1
// @author      nSinister
// @license     MIT
// @description Opens videos in external player (mpv) by simply clicking on a thumbnail.
// @description:ru Проигрывает ролики во внешнем плеере (mpv) по нажатию на миниатюру
//
// ==/UserScript==

"use strict";


let observer;
let listeners = [];

let sites = {
  "youtube.com": { sel: "a.ytd-thumbnail", url: "https://www.youtube.com", needsFullUrl: true },
  "vimeo.com": { sel: "a.iris_video-vital__overlay", url: "https://vimeo.com", needsFullUrl: false },
};

// Watches for new elements based on selector to appear on page and assigns a function to them
function ready(selector, func) {
    listeners.push({ selector: selector, func: func });
    if (!observer) {
        observer = new MutationObserver(checkDOM);
        observer.observe(document.documentElement, { childList: true, subtree: true });
    }
    checkDOM();
}

function checkDOM() {
    for (let i = 0, len = listeners.length, listener, elements; i < len; i++) {
        listener = listeners[i];
        elements = document.querySelectorAll(listener.selector);
        for (let j = 0, jlen = elements.length, element; j < jlen; j++) {
            element = elements[j];
            if (!element.ready) {
                element.ready = true;
                listener.func.call(element, element);
            }
        }
    }
}

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


// Replaces https:// hyperlinks with mpv:// and overrides click event
function replaceLink(node, site) {
  if(node) {
    let hrefval = node.getAttribute('href');
    if (hrefval == null || hrefval.startsWith("mpv"))
      return;

    let full_url = (site.needsFullUrl ? site.url : "") + hrefval;
    if (full_url.startsWith('http')) {
      url = full_url;
    }
    if (url == '') {
      var url = location.href;
    }

    var subs = '';
    var s = url;
    var bs = GM_btoaUrl(s);
    var url2 = 'mpv://play/' + bs + '/' + "?referer=" + GM_btoaUrl(location.href);
    if (subs != '') {
      url2 = url2 + '?subs=' + GM_btoaUrl(subs);
    }

    node.setAttribute('href', url2);
    node.addEventListener('click', function(event){
      event.preventDefault();
      event.stopPropagation();
      location.href = url2;
    });
  }
}

// Detects and returns current site from the list of known websites
function detectSite(sites) {
  let site;
  for (let s in sites) {
    site = sites[s];
    if (location.href.includes(s)) {
      return site;
    }
  }
  return null;
}

let site = detectSite(sites)
if (site) {
  ready(site.sel, function(element) {
      replaceLink(element, site);
  });
}

Cơ chế là select a.ytd-thumbnail và đổi link thành protocol của mpv có dạng mpv://play/ Tuy nhiên, Youtube có 1 cái tính năng giời ơi là "Hovering to Play" (di chuột lên trên thumbnail để chạy) ở trang Home, Subscription, Search và mấy chỗ này sẽ không có a.ytd-thumbnail để đổi link. Cái thanh gợi ý bên tay phải lúc xem video trên trình duyệt thì vẫn hoạt động.

Giải pháp sẽ có 2 cách:
  1. Đăng nhập vào Google và settings để tắt Inline Playback
  2. Dùng Cookie Manager để sửa Cookie của Youtube: Thêm f7=1 vào PREF (Nếu PREF đang có giá trị thì thêm &f7=1 vào cuối cùng)
  3. Dùng Header Editor thêm Set-Cookie vào Response Header để trình duyệt tự lưu cookie
  • Rule type: Modify response header
  • Match type: Regular expression
  • Match rule: .*?youtube.*?/
  • Execute type: Custom function (cần bật Include request headers in custom function trong Options của HE)
JavaScript:
for (const a in val) {
    if (val[a].name.toLowerCase() === 'set-cookie') {
        val[a].value+='\nPREF=f7=1';
    }
}

cái này em chỉ cần thêm cái script là được à các bác
 
Lạ nhỉ cái script click thumbnail cho m.youtube ở phần search thì 4 kết quả đầu không tự chuyển thành dạng mpv:// nhưng từ cái thứ 5 trở đi thi lại tự động chuyển.
Edit: F5 lại thì tự động chuyển hết thành mpv:// luôn
6juRhs5.png
@ducminh3112 Script trên có thể viết lại dựa trên document.addEventListener('mouseover', function (e) {........}); đấy, nghĩa là không dùng luôn MutationObserver cho hiệu năng tốt hơn và luôn hoạt động khi phát hiện ra link muốn đổi khi hơ chuột lên một cách âm thầm, ở script Handlers Helper mình có ví dụ cách sử dụng ở cuối, có thể tham khảo xem.

Code:
var attachedeles = [];
document.addEventListener('mouseover', function(e) {
  if (e.target.shadowRoot) {
    if (attachedeles.includes(e.target) == false) {
      console.log(attachedeles);
      attachedeles.push(e.target);
      attachDrag(e.target.shadowRoot);
    }
  }
});
 
add được thêm số dòng cho shortcut

tắt mục Shortcuts này đi rồi dùng mục Bookmark
Dùng thử "Collection" đi thím, chứ "Shortcut" thì ít item, "Bookmark" thì phải có "Recent" nó mới hiện, vài hôm không bookmark thêm trang nào mới là không có mục đó luôn.

Vào tab tray, chọn tab (nhấn giữ) rồi add vào collection, bao nhiêu cũng được
Screenshot_20230928_115731_Firefox Beta.jpg

mỗi chủ đề lại đặt tên có chứa icon phù hợp cho dễ nhận diện :D:
android-collections2-e1598472000890-600x576.png
 
Last edited:
Dùng thử "Collection" đi thím, chứ "Shortcut" thì ít item, "Bookmark" thì phải có "Recent" nó mới hiện, vài hôm không bookmark thêm trang nào mới là không có mục đó luôn.

Vào tab tray, chọn tab (nhấn giữ) rồi add vào collection, bao nhiêu cũng được
Giống Tab Group phết nếu biết dùng, @health @shenzero999 dùng thử xem, thấy trang nào muốn cho vào Collection thì:

  • Ấn vào nút VUÔNG quản lý tab
  • Giữ chặt chuột vào
  • Bôi đen rồi ấn vào nút Add to Collection
    1695879532129.png
  • Đặt tên tùy ý hoặc thêm vào cái tạo sẵn

Hoặc:
  • Ấn vào nút ...
  • Add to Collection
    1695879532129.png

Nên vào Customize Homepage rồi tắt sạch Shortcut, Bookmark, History đi, không để lại gì cả.

Như thế có thể tạo ra theo nhiều chủ đề, ví dụ:
1695879678737.png
 
Back
Top