Documentï¼adoptedStyleSheets 屿§
åºçº¿
广æ³å¯ç¨
èª 2023å¹´3æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
Document æ¥å£ç adoptedStyleSheets 屿§ç¨äºè®¾ç½®ææ¡£ä½¿ç¨çæé æ ·å¼è¡¨æ°ç»ã
夿³¨ï¼æå»ºæ ·å¼è¡¨æ¯æä½¿ç¨ CSSStyleSheet() æé 彿°ä»¥ç¼ç¨æ¹å¼åå»ºçæ ·å¼è¡¨ï¼ä¸ç¨æ·ä»£çå¨ä»èæ¬å¯¼å
¥æ ·å¼è¡¨æ¶ãä½¿ç¨ <style> å @import è¿è¡å¯¼å
¥ï¼æéè¿ <link>ï¼é¾æ¥æ¶åå»ºçæ ·å¼è¡¨ç¸å¯¹æ¯ã
ç¸åçæé æ ·å¼è¡¨ä¹å¯ä»¥éè¿ä½¿ç¨ ShadowRoot.adoptedStyleSheets 屿§ä¸ä¸ä¸ªæå¤ä¸ª ShadowRoot å®ä¾å
±äº«ãæ´æ¹å·²éç¨çæ ·å¼è¡¨ä¼å½±åéç¨è¯¥æ ·å¼è¡¨çææå¯¹è±¡ã
è¯¥å±æ§ä¸çæ ·å¼è¡¨å°ä¸ææ¡£çå
¶ä»æ ·å¼è¡¨ä¸èµ·æ ¹æ® CSS å±å ç®æ³è¿è¡æ±å¼ãå¨è§åè§£æèèæ ·å¼è¡¨çé¡ºåºæ¶ï¼adoptedStyleSheets 被å宿åå¨ Document.styleSheets ä¸é£äºæ ·å¼è¡¨ä¹åã
åªæå¨å½å Document ä¸ä¸æä¸ä½¿ç¨ CSSStyleSheet() æé 彿°åå»ºçæ ·å¼è¡¨æå¯ä»¥è¢«éç¨ã
å¼
è¯¥å¼æ¯ CSSStyleSheet å®ä¾æ°ç»ï¼è¿äºå®ä¾å¿
é¡»æ¯å¨åä¸ Document ä¸ä¸æä¸ä½¿ç¨ CSSStyleSheet() æé 彿°å建çã
妿éè¦ä¿®æ¹æ°ç»ï¼å¯ä»¥ä½¿ç¨å push() è¿æ ·çåå°ä¿®æ¹æ¹æ³ãCSSStyleSheet å®ä¾æ¬èº«ä¹å¯ä»¥è¢«ä¿®æ¹ï¼ä¸è¿äºä¿®æ¹å°åºç¨å¨éç¨è¯¥æ ·å¼è¡¨çä»»ä½å°æ¹ã
卿©æçæ¬è§èä¸ï¼è¯¥æ°ç»æ¯ä¸å¯ä¿®æ¹çï¼å æ¤æ·»å æ°æ ·å¼è¡¨çå¯ä¸æ¹æ³æ¯ä¸º adoptedStyleSheets åé
ä¸ä¸ªæ°çæ°ç»ã
å¼å¸¸
NotAllowedErrorDOMException-
æ°ç»ä¸çæä¸ª
CSSStyleSheetå®ä¾ä¸æ¯ä½¿ç¨CSSStyleSheet()æé 彿°å建çï¼æè æ¯ä¸å½åææ¡£ä¸åçææ¡£ï¼ä¾å¦ iframe ä¸çææ¡£ï¼ä¸æå»ºçã
示ä¾
>éç¨æ ·å¼è¡¨
以ä¸ä»£ç å±ç¤ºäºæ ·å¼è¡¨çæå»ºè¿ç¨ï¼ç¶åè°ç¨ CSSStyleSheet.replaceSync() å°ä¸æ¡è§åæ·»å å°æ ·å¼è¡¨ä¸ãç¶åæ ·å¼è¡¨ä¼è¢«æ·»å å°æ°ç»ä¸ï¼å¹¶åé
ç» adoptedStyleSheets 屿§ã
// å建ä¸ä¸ªç©ºçâæé çâæ ·å¼è¡¨
const sheet = new CSSStyleSheet();
// åºç¨ä¸æ¡è§åå°æ ·å¼è¡¨
sheet.replaceSync("a { color: red; }");
// å°æ ·å¼è¡¨åºç¨å°ææ¡£ä¸
document.adoptedStyleSheets = [sheet];
æä»¬å¯ä»¥ä½¿ç¨ CSSStyleSheet.insertRule() å°æ°è§åæ·»å å°æ ·å¼è¡¨ä¸ã
sheet.insertRule("* { background-color: blue; }");
// ç°å¨ææ¡£å°æ¾ç¤ºèè²èæ¯ã
è¿½å æ°çæ ·å¼è¡¨
è¦å¨ adoptedStyleSheets 屿§ä¸æ·»å å
¨æ°çæ ·å¼è¡¨ï¼æä»¬å¿
é¡»å建æ°çç»åæ°ç»å¹¶ä¸ºå
¶èµå¼ãä¸é¢å°ä½¿ç¨å±å¼è¯æ³è¿è¡å±ç¤ºï¼
const extraSheet = new CSSStyleSheet();
extraSheet.replaceSync("p { color: green; }");
// åå¹¶ç°ææ ·å¼è¡¨åæ°çæ ·å¼è¡¨
document.adoptedStyleSheets = [...document.adoptedStyleSheets, extraSheet];
ä¸å½±å DOM å ±äº«æ ·å¼è¡¨
æä»¬å¯ä»¥ç¨ç±»ä¼¼çæ¹æ³å°æ ·å¼è¡¨å ±äº«å°å½±åæ ¹ä¸ã
// å¨ææ¡£ä¸å建å
ç´ ï¼ç¶ååå»ºå½±åæ ¹ï¼
const node = document.createElement("div");
const shadow = node.attachShadow({ mode: "open" });
// å¨å½±å DOM ä¸éç¨åä¸ä¸ªæ ·å¼è¡¨
shadow.adoptedStyleSheets = [sheet];
è§è
| è§è |
|---|
| CSS Object Model (CSSOM) > # dom-documentorshadowroot-adoptedstylesheets > |