我试图让我网站上的用户在本地计算机上保存 XML 文件,然后使用 HTML 文件元素加载它们。
保存使用 iFrame 完成的文件。
当试图让用户加载文件时,我总是遇到异常。我已经尝试了所有可以在网上找到的东西,但似乎找不到方法。
我遇到了各种异常,例如跨域或XMLHttpRequest 无法加载 file:///C:/fakepath/Regions.xml。仅 HTTP 支持跨源请求。 根据我尝试的代码。
我读到 HTML5 标准将 url 替换为“fakepath”,但找不到解决方案。有没有办法让用户从自己的电脑加载文件进行编辑?从服务器加载特定文件不是问题,但我想给用户这种自由,而不是为他们决定要加载什么文件,也让他们在他们的计算机上而不是服务器上保存和加载 xml
这个问题有解决方案吗?
找到了这些代码,但都没有帮助(我已经尝试了一些其他版本):
1)
var error = "";
strFile = document.frmLoadFile.selectedFile.value;
intPos = strFile.lastIndexOf("\\");
strDirectory = strFile.substring(0, intPos);
//alert(strDirectory);
document.frmLoadFile.selectedFile.value = strDirectory;
var file = 'file:\\\\\\' + document.frmLoadFile.selectedFile.value;
try //Internet Explorer
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.load(file);
}
catch (e) {
try //Firefox, Mozilla, Opera, etc.
{
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.async = false;
xmlDoc.load(file);
}
catch (e) {
try //Google Chrome
{
var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", file, false);
xmlhttp.send(null);
xmlDoc = xmlhttp.responseXML.documentElement;
}
catch (e) {
error = e.message;
}
}
}
2)
var xmlDoc;
var xmlloaded = false;
function xml_initLibrary(file) {
importXML(file);
}
function importXML(xmlfile) {
try {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", xmlfile, false);
}
catch (Exception) {
var ie = (typeof window.ActiveXObject != 'undefined');
if (ie) {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
while (xmlDoc.readyState != 4) { };
xmlDoc.load(xmlfile);
xmlloaded = true;
readXML();
}
else {
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.onload = readXML;
xmlDoc.load(xmlfile);
xmlloaded = true;
}
}
if (!xmlloaded) {
xmlhttp.setRequestHeader('Content-Type', 'text/xml')
xmlhttp.send("");
xmlDoc = xmlhttp.responseXML;
xmlloaded = true;
readXML();
}
}
function readXML() {
//console.log(xmlDoc);
}
有谁知道是否有办法解决这个问题?您需要将文件保存在服务器上吗?
非常感谢大家,埃雷兹