Всякий раз, когда я пытаюсь загрузить файл 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
);