Quellcode durchsuchen

added support of --http-header with jsdom

Gildas vor 5 Jahren
Ursprung
Commit
cf380db69c
2 geänderte Dateien mit 16 neuen und 3 gelöschten Zeilen
  1. 1 1
      cli/args.js
  2. 15 2
      cli/back-ends/jsdom.js

+ 1 - 1
cli/args.js

@@ -141,7 +141,7 @@ const args = require("yargs")
 	.string("filename-replacement-character")
 	.options("group-duplicate-images", { description: "Group duplicate images into CSS custom properties" })
 	.boolean("group-duplicate-images")
-	.options("http-header", { description: "Extra HTTP header (puppeteer)" })
+	.options("http-header", { description: "Extra HTTP header (puppeteer, jsdom)" })
 	.array("http-header")
 	.options("include-BOM", { description: "Include the UTF-8 BOM into the HTML page" })
 	.boolean("include-BOM")

+ 15 - 2
cli/back-ends/jsdom.js

@@ -25,7 +25,8 @@
 
 const crypto = require("crypto");
 
-const { JSDOM, VirtualConsole } = require("jsdom");
+const jsdom = require("jsdom");
+const { JSDOM, VirtualConsole } = jsdom;
 const iconv = require("iconv-lite");
 
 exports.initialize = async () => { };
@@ -104,12 +105,24 @@ async function getPageData(win, options) {
 }
 
 function getBrowserOptions(options) {
+	class ResourceLoader extends jsdom.ResourceLoader {
+		_getRequestOptions(fetchOptions) {
+			const requestOptions = super._getRequestOptions(fetchOptions);
+			if (options.httpHeaders) {
+				requestOptions.headers = Object.assign(requestOptions.headers, options.httpHeaders);
+			}
+			return requestOptions;
+		}
+	}
+	const resourceLoader = new ResourceLoader({
+		userAgent: options.userAgent
+	});
 	const jsdomOptions = {
 		virtualConsole: new VirtualConsole(),
 		userAgent: options.userAgent,
 		pretendToBeVisual: true,
 		runScripts: "outside-only",
-		resources: "usable"
+		resources: resourceLoader
 	};
 	if (options.browserWidth && options.browserHeight) {
 		jsdomOptions.beforeParse = function (window) {