Я не могу заставить JavaScript загрузить этот XML файл - PullRequest
0 голосов
/ 21 января 2020

Всякий раз, когда я пытаюсь загрузить файл XML с использованием сценария JS, инспектор говорит это

Could not load XML resource: "unicode-conversion.xml"
unicode.js:45 Exception:"<unicode>
<font name="Bold">
<letter source="a" target="?"/>
<letter source="b" target="?"/>
<letter source="c" target="?"/>
<letter source="d" target="?"/>
<letter source="e" target="?"/>
<letter source="f" target="?"/>
<letter source="g" target="?"/>
<letter source="h" target="?"/>
<letter source="i" target="?"/>
<letter source="j" target="?"/>
<letter source="k" target="?"/>
<letter source="l" target="?"/>
<letter source="m" target="?"/>
<letter source="n" target="?"/>
<letter source="o" target="?"/>
<letter source="p" target="?"/>
<letter source="q" target="?"/>
<letter source="r" target="?"/>
<letter source="s" target="?"/>
<letter source="t" target="?"/>
<letter source="u" target="?"/>
<letter source="v" target="?"/>
<letter source="w" target="?"/>
<letter source="x" target="?"/>
<letter source="y" target="?"/>
<letter source="z" target="?"/>
<letter source="A" target="?"/>
<letter source="B" target="?"/>
<letter source="C" target="?"/>
<letter source="D" target="?"/>
<letter source="E" target="?"/>
<letter source="F" target="?"/>
<letter source="G" target="?"/>
<letter source="H" target="?"/>
<letter source="I" target="?"/>
<letter source="J" target="?"/>
<letter source="K" target="?"/>
<letter source="L" target="?"/>
<letter source="M" target="?"/>
<letter source="N" target="?"/>
<letter source="O" target="?"/>
<letter source="P" target="?"/>
<letter source="Q" target="?"/>
<letter source="R" target="?"/>
<letter source="S" target="?"/>
<letter source="T" target="?"/>
<letter source="U" target="?"/>
<letter source="V" target="?"/>
<letter source="W" target="?"/>
<letter source="X" target="?"/>
<letter source="Y" target="?"/>
<letter source="Z" target="?"/>
<letter source="0" target="?"/>
<letter source="1" target="?"/>
<letter source="2" target="?"/>
<letter source="3" target="?"/>
<letter source="4" target="?"/>
<letter source="5" target="?"/>
<letter source="6" target="?"/>
<letter source="7" target="?"/>
<letter source="8" target="?"/>
<letter source="9" target="?"/>
<letter source="!" target="❗"/>
<letter source="?" target="❓"/>
<letter source="." target="."/>
<letter source="," target=","/>
<letter source=""" target="""/>
<letter source="'" target="'"/>
</font>
<font name="Italics">
<letter source="a" target="?"/>
<letter source="b" target="?"/>
<letter source="c" target="?"/>
<letter source="d" target="?"/>
<letter source="e" target="?"/>
<letter source="f" target="?"/>
<letter source="g" target="?"/>
<letter source="h" target="?"/>
<letter source="i" target="?"/>
<letter source="j" target="?"/>
<letter source="k" target="?"/>
<letter source="l" target="?"/>
<letter source="m" target="?"/>
<letter source="n" target="?"/>
<letter source="o" target="?"/>
<letter source="p" target="?"/>
<letter source="q" target="?"/>
<letter source="r" target="?"/>
<letter source="s" target="?"/>
<letter source="t" target="?"/>
<letter source="u" target="?"/>
<letter source="v" target="?"/>
<letter source="w" target="?"/>
<letter source="x" target="?"/>
<letter source="y" target="?"/>
<letter source="z" target="?"/>
<letter source="A" target="?"/>
<letter source="B" target="?"/>
<letter source="C" target="?"/>
<letter source="D" target="?"/>
<letter source="E" target="?"/>
<letter source="F" target="?"/>
<letter source="G" target="?"/>
<letter source="H" target="?"/>
<letter source="I" target="?"/>
<letter source="J" target="?"/>
<letter source="K" target="?"/>
<letter source="L" target="?"/>
<letter source="M" target="?"/>
<letter source="N" target="?"/>
<letter source="O" target="?"/>
<letter source="P" target="?"/>
<letter source="Q" target="?"/>
<letter source="R" target="?"/>
<letter source="S" target="?"/>
<letter source="T" target="?"/>
<letter source="U" target="?"/>
<letter source="V" target="?"/>
<letter source="W" target="?"/>
<letter source="X" target="?"/>
<letter source="Y" target="?"/>
<letter source="Z" target="?"/>
<letter source="0" target="0"/>
<letter source="1" target="1"/>
<letter source="2" target="2"/>
<letter source="3" target="3"/>
<letter source="4" target="4"/>
<letter source="5" target="5"/>
<letter source="6" target="6"/>
<letter source="7" target="7"/>
<letter source="8" target="8"/>
<letter source="9" target="9"/>
<letter source="!" target="!"/>
<letter source="?" target="?"/>
<letter source="." target="."/>
<letter source="," target=","/>
<letter source=""" target="""/>
<letter source="'" target="'"/>
</font>
<font name="Bold Italics">
<letter source="a" target="?"/>
<letter source="b" target="?"/>
<letter source="c" target="?"/>
<letter source="d" target="?"/>
<letter source="e" target="?"/>
<letter source="f" target="?"/>
<letter source="g" target="?"/>
<letter source="h" target="?"/>
<letter source="i" target="'

Кроме того, хотя он не выдает ошибок, он показывает предупреждение: «Устаревание] Синхронный XMLHttpRequest в основном потоке устарел из-за его пагубных последствий для конечного пользователя. Для получения дополнительной помощи, проверьте https://xhr.spec.whatwg.org/. "

Я использую http-сервер и мой локальные файлы, поэтому его пока нет в inte rnet. Я также оставляю здесь свой код JS на тот случай, если это необходимо для решения проблемы. По сути, это конвертер Юникода, который работает через событие oninput DOM в текстовой области.

var NS = {
	XML				: "http://www.w3.org/XML/1998/namespace",
	HTML 			: "http://www.w3.org/1999/xhtml",
	SVG 			: "http://www.w3.org/2000/svg",
	XLINK 			: "http://www.w3.org/1999/xlink",
	XSL 			: "http://www.w3.org/1999/XSL/Transform",
	MOZ_XUL			: "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
	MOZ_ERR_PARSE 	: "http://www.mozilla.org/newlayout/xml/parsererror.xml",
	IBP				: "http://www.ibp-dresden.de",
	LLO				: "http://slothsoft.net",
	resolver : function(prefix) {
		return NS[prefix.toUpperCase()];
	},
	prefixer : function(uri) {
		var prefix, ret = "";
		for (prefix in NS) {
			if (NS[prefix] === uri) {
				ret = prefix;
				break;
			}
		}
		return ret.toLowerCase();
	},
};

var DOM = {
	loadDocument : function(uri) {
		var retDoc, req;
		try {
			req = new XMLHttpRequest();
			req.open("GET", uri, false);
			if (req.overrideMimeType) {
				//req.overrideMimeType("application/xml; charset=UTF-8");
			}
			req.send();
			if (req.responseXML) {
				retDoc = req.responseXML;
			} else {
				//retDoc = this.loadXML(req.responseText);
				throw req.responseText;
			}
			retDoc.fileURI = uri;
		} catch (e) {
			console.log("Could not load XML resource: %o", uri);
			console.log("Exception:%o", e);
			retDoc = false;
		}
		return retDoc;
	},
	saveDocument : function(uri, doc) {
		var ret, req;
		try {
			req = new XMLHttpRequest();
			req.open("POST", uri, false);
			//req.setRequestHeader("Content-Type", "application/xml");
			req.send(doc);
			ret = req.responseXML;
		} catch (e) {
			console.log("Could not save XML resource: %o", uri);
			console.log("Exception:%o", e);
			ret = false;
		}
		return ret;
	},
	loadXML : function(xml) {
		var doc, parser;
		parser = new DOMParser();
		doc = parser.parseFromString(xml, "application/xml");
		if (doc.documentElement.namespaceURI === NS.MOZ_ERR_PARSE) {
			throw ""+doc.documentElement.textContent;
		}
		return doc;
	},
	saveXML : function(doc) {
		var xml, serializer;
		serializer = new XMLSerializer();
		xml = serializer.serializeToString(doc);
		return xml;
	}
};

var DOMHelper = {
	loadDocument : function(uri, callback) {
		try {
			let req = new XMLHttpRequest();
			req.open("GET", uri, false);
			if (req.overrideMimeType) {
				//req.overrideMimeType("application/xml; charset=UTF-8");
			}
			if (callback) {
				req.addEventListener(
					"loadend",
					(eve) => {
						let retDoc = req.responseXML;
						if (retDoc) {
							retDoc.fileURI = uri;
						} else {
							retDoc = false;
							
							console.log("Could not load XML resource: %o", uri);
							console.log(req.responseText);
						}
						callback(retDoc);
					},
					false
				);
			}
			req.send();
		} catch (e) {
			console.log("Could not load XML resource: %o", uri);
			console.log("Exception:%o", e);
		}
	},
};

var XPath = {
	evaluate : function(query, contextNode) {
		var ownerDoc, res, ret, tmp, isTextNode;
		if (contextNode instanceof Array) {
			ret = [];
			for (var i = 0; i < contextNode.length; i++) {
				res = this.evaluate(query, contextNode[i]);
				if (res instanceof Array) {
					ret = ret.concat(res);
				} else {
					ret.push(res);
				}
			}
			return ret;
		}
		try {
			ownerDoc = contextNode.nodeType === Node.DOCUMENT_NODE
				? contextNode
				: contextNode.ownerDocument;
			//use wgxpath
			if (window.wgxpath) {
				if (!window.document.evaluate) {
					window.wgxpath.install(window);
				}
				if (!ownerDoc.evaluate) {
					window.wgxpath.install( { document : ownerDoc } );
				}
			}
			//alert(ownerDoc + "\n" + ownerDoc.evaluate + "\n" + ownerDoc.selectNodes);
			isTextNode = false;
			if (contextNode.nodeType === Node.TEXT_NODE) {
				if (contextNode.nodeValue === "") {
					contextNode.nodeValue = " ";
					isTextNode = true;
				}
			}
			res = ownerDoc.evaluate(query, contextNode, NS.resolver, XPathResult.ANY_TYPE, null);
			switch (res.resultType) {
				case XPathResult.NUMBER_TYPE:
					ret = res.numberValue;
					break;
				case XPathResult.STRING_TYPE:
					ret = res.stringValue;
					break;
				case XPathResult.BOOLEAN_TYPE:
					ret = res.booleanValue;
					break;
				default:
					ret = [];
					while (tmp = res.iterateNext()) {
						ret.push(tmp);
					}
					break;
			}
			//window.console.log("XPath result type: %o (%o)", res.resultType, typeof ret);
			if (isTextNode) {
				contextNode.nodeValue = "";
			}
			return ret;
		} catch(e) {
			window.console.log("XPath error!");
			window.console.log("Query:%o", query);
			window.console.log("Context node:%o", contextNode);
			window.console.log("Exception:%o", e);
			throw e;
		}
	},
	createPath : function(contextNode) {
		var node, nodeList, i, ret = [""], tag, precedingList, followingList;
		nodeList = this.evaluate("ancestor-or-self::node()", contextNode);
		for (i = 0; i < nodeList.length; i++) {
			node = nodeList[i];
			switch (node.nodeType) {
				case node.TEXT_NODE:
					tag = "text()";
					break;
				case node.ELEMENT_NODE:
					tag = NS.prefixer(node.namespaceURI) + ":" + node.localName;
					break;
				default:
					tag = false;
					break;
			}
			if (tag) {
				precedingList = XPath.evaluate("preceding-sibling::" + tag, node);
				followingList = XPath.evaluate("following-sibling::" + tag, node);
				if (precedingList.length + followingList.length) {
					tag += "[" + (precedingList.length + 1) + "]";
				}
				ret.push(tag);
			}
		}
		return ret.join("/");
	},
};

var XSLT = {
	transformToFragment : function(dataNode, templateDoc, ownerDoc) {
		var xslt,
			uri, tmpDoc, nodeList, node, i,
			retFragment = false;
		try {
			//xsl:import parsen, für Chrome+Safari
			try {
				while (node = XPath.evaluate("//xsl:import", templateDoc)[0]) {
					uri = node.getAttribute("href");
					if (tmpDoc = DOM.loadDocument(uri)) {
						nodeList = XPath.evaluate("/xsl:stylesheet/*", tmpDoc);
						for (i = 0; i < nodeList.length; i++) {
							node.parentNode.appendChild(templateDoc.importNode(nodeList[i], true));
						}
					}
					node.parentNode.removeChild(node);
				}
			} catch(e) {
				console.log("XSLT Error: could not process xsl:import elements");
				console.log(e);
			}
			if (window.XSLTProcessor) {
				xslt = new XSLTProcessor();
				xslt.importStylesheet(templateDoc);
				retFragment = xslt.transformToFragment(dataNode, ownerDoc);
				if (!retFragment) {
					throw "XSLTProcessor.transformToFragment returned null!";
				}
			} else if (window.ActiveXObject) {
				xslt = new ActiveXObject("Msxml2.XSLTemplate.6.0");
				//var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
				//var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
				xslt.stylesheet = templateDoc;
				xslt = xslt.createProcessor();
				xslt.input = dataNode;
				xslt.transform();
				retFragment = ownerDoc.importNode(xslProc.output, true);
				if (!retFragment) {
					throw "Msxml2.XSLTemplate.transform returned null!";
				}
			}
		} catch(e) {
			console.log("An error occured while attempting to XSL transform. :|");
			console.log("Data node:%o", dataNode);
			console.log("Template document:%o", templateDoc);
			console.log("Owner document:%o", ownerDoc);
			console.log("Exception:%o", e);
			retFragment = ownerDoc.createDocumentFragment();
		}
		return retFragment;
	},
	transformToNode : function(dataNode, templateDoc, ownerDoc) {
		return this.transformToFragment(dataNode, templateDoc, ownerDoc).firstChild;
	},
};

var UnicodeMapper = {
	fontList : {},
	outputNodes : undefined,
	unicodeDocument : undefined,
	unicodeURI : document.currentScript.getAttribute('src').replace('unicode.js', 'unicode-conversion.xml'),
	init : function() {
		var fontNodeList, fontNode, labelNode, spanNode, i, nodeList, j, key, val, font, fontName;
		if (!this.initialized) {
			this.fontList = {};
			
			this.unicodeDocument = DOM.loadDocument(this.unicodeURI);
			if (this.unicodeDocument) {
				fontNodeList = this.unicodeDocument.getElementsByTagName("font");
				for (i = 0; i < fontNodeList.length; i++) {
					fontNode = fontNodeList[i];
					fontName = fontNode.getAttribute("name");
					font = {};
					nodeList = fontNode.getElementsByTagName("letter");
					for (j = 0; j < nodeList.length; j++) {
						key = nodeList[j].getAttribute("source");
						val = nodeList[j].getAttribute("target");
						font[key] = val;
					}
					this.fontList[fontName] = font;
				}
			}
			
			this.outputNodes = {};
			fontNode = document.getElementsByTagNameNS(NS.HTML, "fieldset")[0];
			for (fontName in this.fontList) {
				labelNode = document.createElementNS(NS.HTML, "label");
				spanNode = document.createElementNS(NS.HTML, "span");
				spanNode.appendChild(document.createTextNode(this.convertWord(fontName, fontName)));
				labelNode.appendChild(spanNode);
				this.outputNodes[fontName] = document.createElementNS(NS.HTML, "textarea");
				this.outputNodes[fontName].setAttribute("class", "myParagraph");
				labelNode.appendChild(this.outputNodes[fontName]);
				fontNode.appendChild(labelNode);
			}
			
			this.initialized = true;
			
			this.typeCharacter(document.getElementsByTagNameNS(NS.HTML, "textarea")[0]);
		}
	},
	typeCharacter : function(inputNode) {
		var text, currentChar, i, fontType, outputNode, outputText, isUpperCase, codePoint, inputText;
		this.init();
		inputText = inputNode.value;
		outputText = {};
		
		//initialize output
		for (fontType in this.fontList) {
			outputText[fontType] = "";
		}
		
		//generate output
		for (fontType in this.fontList) {
			outputText[fontType] = this.convertWord(inputText, fontType);
		}
		
		//set output
		for (fontType in this.fontList) {
			if (outputNode = this.outputNodes[fontType]) {
				outputNode.value = outputText[fontType];
			}
		}
	},
	convertWord : function(inputText, fontType) {
		var outputText, currentChar;
		outputText = "";
		for (var i = 0; i < inputText.length; i++) {
			currentChar = inputText[i];
			if (this.fontList[fontType] && this.fontList[fontType][currentChar]) {
				currentChar = this.fontList[fontType][currentChar];
			}
			//Special stuff
			switch (fontType) {
				case "underlined-single":
					currentChar += "̲";
					break;
				case "Double Underline":
					currentChar += "͇";
					break;
				case "strikethrough-single":
					currentChar += "̶";
					break;
				case "crosshatch":
					currentChar += "Ì·";
					break;
			}
			outputText += currentChar;
		}
		/*
		if (fontType === tableFlip) {
			outputText = this.flipString(outputText);
		}
		//*/
		return outputText;
	},
	flipString : function(str) {
		var ret, i;
		ret = "";
		for (i = str.length - 1; i >= 0; i--) {
			ret += str[i];
		}
		return ret;
	},
};

addEventListener(
	"load",
	function(eve) {
		UnicodeMapper.init();
	},
	false
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...