|
|
@@ -705,9 +705,9 @@ this.SingleFileCore = this.SingleFileCore || (() => {
|
|
|
const styleSheetUrl = new URL(match.resourceURL, baseURI).href;
|
|
|
let importedStylesheetContent = await Download.getContent(styleSheetUrl, { asDataURI: false, maxResourceSize: options.maxResourceSize, maxResourceSizeEnabled: options.maxResourceSizeEnabled });
|
|
|
importedStylesheetContent = DomUtil.wrapMediaQuery(importedStylesheetContent, match.media);
|
|
|
- if (stylesheetContent.indexOf(cssImport) != -1) {
|
|
|
+ if (stylesheetContent.includes(cssImport)) {
|
|
|
importedStylesheetContent = await DomProcessorHelper.resolveImportURLs(importedStylesheetContent, styleSheetUrl, options);
|
|
|
- stylesheetContent = stylesheetContent.replace(cssImport, importedStylesheetContent);
|
|
|
+ stylesheetContent = stylesheetContent.replace(DomUtil.getRegExp(cssImport), importedStylesheetContent);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -721,12 +721,15 @@ this.SingleFileCore = this.SingleFileCore || (() => {
|
|
|
let resourceURL = DomUtil.matchURL(urlFunction);
|
|
|
resourceURL = DomUtil.normalizeURL(resourceURL);
|
|
|
if (resourceURL && resourceURL != baseURI && DomUtil.testValidPath(resourceURL)) {
|
|
|
- stylesheetContent = stylesheetContent.replace(urlFunction, urlFunction.replace(resourceURL, new URL(resourceURL, baseURI).href));
|
|
|
+ const resolvedURL = new URL(resourceURL, baseURI).href;
|
|
|
+ if (resourceURL != resolvedURL && stylesheetContent.includes(urlFunction)) {
|
|
|
+ stylesheetContent = stylesheetContent.replace(DomUtil.getRegExp(urlFunction), urlFunction.replace(resourceURL, resolvedURL));
|
|
|
+ }
|
|
|
} else {
|
|
|
if (resourceURL.startsWith(DATA_URI_PREFIX)) {
|
|
|
const escapedResourceURL = resourceURL.replace(/&/g, "&").replace(/\u00a0/g, " ").replace(/</g, "<").replace(/>/g, ">");
|
|
|
- if (escapedResourceURL != resourceURL) {
|
|
|
- stylesheetContent = stylesheetContent.replace(resourceURL, escapedResourceURL);
|
|
|
+ if (escapedResourceURL != resourceURL && stylesheetContent.includes(urlFunction)) {
|
|
|
+ stylesheetContent = stylesheetContent.replace(DomUtil.getRegExp(urlFunction), urlFunction.replace(resourceURL, escapedResourceURL));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -750,9 +753,9 @@ this.SingleFileCore = this.SingleFileCore || (() => {
|
|
|
await Promise.all(urlFunctions.map(async urlFunction => {
|
|
|
let resourceURL = DomUtil.matchURL(urlFunction);
|
|
|
resourceURL = DomUtil.normalizeURL(resourceURL);
|
|
|
- if (resourceURL && resourceURL != baseURI && DomUtil.testValidPath(resourceURL)) {
|
|
|
+ if (resourceURL && resourceURL != baseURI && DomUtil.testValidPath(resourceURL) && stylesheetContent.includes(urlFunction)) {
|
|
|
const dataURI = await batchRequest.addURL(resourceURL);
|
|
|
- stylesheetContent = stylesheetContent.replace(urlFunction, urlFunction.replace(resourceURL, dataURI));
|
|
|
+ stylesheetContent = stylesheetContent.replace(DomUtil.getRegExp(urlFunction), urlFunction.replace(resourceURL, dataURI));
|
|
|
}
|
|
|
}));
|
|
|
return stylesheetContent;
|
|
|
@@ -856,8 +859,12 @@ this.SingleFileCore = this.SingleFileCore || (() => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ static getRegExp(string) {
|
|
|
+ return new RegExp(string.replace(/([{}()^$&.*?/+|[\\\\]|\]|-)/g, "\\$1"), "gi");
|
|
|
+ }
|
|
|
+
|
|
|
static getUrlFunctions(stylesheetContent) {
|
|
|
- return stylesheetContent.match(REGEXP_URL_FN) || [];
|
|
|
+ return Array.from(new Set(stylesheetContent.match(REGEXP_URL_FN) || []));
|
|
|
}
|
|
|
|
|
|
static getImportFunctions(stylesheetContent) {
|