Просмотр исходного кода

use CSSOM to retrieve stylesheet content only when needed

Gildas 7 лет назад
Родитель
Сommit
5405b818be
1 измененных файлов с 9 добавлено и 1 удалено
  1. 9 1
      lib/single-file/doc-helper.js

+ 9 - 1
lib/single-file/doc-helper.js

@@ -117,11 +117,19 @@ this.docHelper = this.docHelper || (() => {
 		if (doc) {
 			const contents = [];
 			doc.querySelectorAll("style").forEach((styleElement, styleIndex) => {
+				let stylesheet;
 				try {
-					contents[styleIndex] = Array.from(styleElement.sheet.cssRules).map(rule => rule.cssText).join("\n");
+					const tempStyleElement = doc.createElement("style");
+					tempStyleElement.textContent = styleElement.textContent;
+					doc.body.appendChild(tempStyleElement);
+					stylesheet = tempStyleElement.sheet;
+					tempStyleElement.remove();
 				} catch (error) {
 					/* ignored */
 				}
+				if (!stylesheet || stylesheet.cssRules.length != styleElement.sheet.cssRules.length) {
+					contents[styleIndex] = Array.from(styleElement.sheet.cssRules).map(rule => rule.cssText).join("\n");
+				}
 			});
 			return contents;
 		}