您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Ensure all Shadow DOM nodes are open. Includes workarounds for broken functionality due to Shadow DOM restriction. Intented for research use.
- // ==UserScript==
- // @name Open Source Shadow DOM
- // @namespace https://greasyfork.org/en/users/85671-jcunews
- // @version 1.1.3
- // @license AGPLv3
- // @author jcunews
- // @description Ensure all Shadow DOM nodes are open. Includes workarounds for broken functionality due to Shadow DOM restriction. Intented for research use.
- // @match *://*/*
- // @grant none
- // @inject-into page
- // @run-at document-start
- // ==/UserScript==
- (d => {
- //fix document.activeElement not able to get element in Shadow DOM
- var dac = (d = Object.getOwnPropertyDescriptor(Document.prototype, "activeElement")).get;
- d.get = function() {
- var p = dac.call(this), n;
- while (n = p.shadowRoot?.activeElement) p = n;
- return p
- };
- Object.defineProperty(Document.prototype, "activeElement", d);
- //make sure Shadow DOMs are open
- var as = Element.prototype.attachShadow;
- Element.prototype.attachShadow = function(opts) {
- var o = {}, m = opts?.mode, r;
- Array.from(Object.entries(opts)).forEach(a => o[a[0]] = a[1]);
- o.mode = "open";
- opts = o;
- r = as.apply(this, arguments);
- if (m === "closed") {
- Object.defineProperty(r, "realMode", {value: "open"});
- Object.defineProperty(r, "mode", {
- get: () => "closed",
- set: v => v
- })
- }
- return r
- };
- //fix event not dispatching if it came from element in Shadow DOM
- var dael = Document.addEventListener;
- Document.addEventListener = function(typ, fn) {
- function f(e) {
- if (e.shadowRoot) {
- e.shadowRoot.addEventListener.apply(e.shadowRoot, arguments);
- e.shadowRoot.querySelectorAll('*').forEach(f)
- }
- }
- document.querySelectorAll('body,body *').forEach(f);
- return dael.apply(this, arguments)
- };
- })()