您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Make Stylus styles also be applied to Shadow DOM elements.
当前为
- // ==UserScript==
- // @name Stylus Shadow DOM Support
- // @namespace https://greasyfork.org/en/users/85671-jcunews
- // @version 1.0.5
- // @license AGPLv3
- // @author jcunews
- // @description Make Stylus styles also be applied to Shadow DOM elements.
- // @match *://*/*
- // @include *:*
- // @inject-into page
- // @grant none
- // @run-at document-end
- // ==/UserScript==
- ((updDelay, ass, eas, at) => {
- function chkNode(e) {
- return (e.tagName === "STYLE") && /^stylus-/.test(e.id)
- }
- function applyStylus(ss) {
- ss = document.querySelectorAll('html>style[id^="stylus-"]');
- ass.forEach(e => {
- if (!e.shadowRoot) return;
- Array.from(e.shadowRoot.children).forEach(el => chkNode(el) && el.remove());
- ss.forEach(el => e.shadowRoot.append(el.cloneNode(true)))
- })
- }
- if (window._cf_chl_opt) return;
- updDelay = 500;
- ass = [];
- if (!(eas = Element.prototype.attachShadow)) return;
- Element.prototype.attachShadow = function(opt) {
- if (!document.querySelector('script[src^="https://challenges.cloudflare.com/"]')) {
- if (opt) {
- opt.mode = "open"
- } else opt = {mode: "open"};
- }
- !ass.includes(this) && ass.push(this);
- clearTimeout(at);
- at = setTimeout(applyStylus, updDelay);
- return eas.apply(this, arguments)
- };
- at = 0;
- if (!document.documentElement) return;
- (new MutationObserver(function(recs, b) {
- recs.forEach(rec => {
- rec.addedNodes.forEach(e => {
- if (!chkNode(e)) return;
- (e.obs = new MutationObserver(function(recs, b) {
- clearTimeout(at);
- at = setTimeout(applyStylus, updDelay);
- })).observe(e, {characterData: true, subtree: true});
- b = true
- });
- rec.removedNodes.forEach(e => {
- if (!e.obs) return
- e.obs.disconnect();
- b = true
- });
- });
- if (b) {
- clearTimeout(at);
- at = setTimeout(applyStylus, updDelay);
- }
- })).observe(document.documentElement, {childList: true});
- })();