html用js 读取绝对路径的xml,用JS读取本地XML

默认情况下,未启用在铬实例启动时file:使用铬XMLHttpRequest()或使用无--allow-file-access-from-files标记设置访问协议。默认情况下,file:// URIs无法读取其他file:// URI。这是对需要旧行为进行测试的开发人员的覆盖。

目前,由于安全策略,Chromium无法通过ajax读取本地文件--allow-file-access-from-files。但我目前需要创建一个Web应用程序,其中数据库是一个xml文件(在极端情况下为json),位于一个带有index.html的目录中。可以理解,用户可以在本地运行该应用程序。是否有解决xml-(json-)文件的解决方法,而不将其包装在函数中并更改为js扩展名?

如果用户知道应用程序将使用本地文件,则可以使用元素供用户从用户本地文件系统上载文件,使用处理文件FileReader,然后继续应用程序。

否则,建议用户使用应用程序需要启动带有--allow-file-access-from-files标志集的铬 ,这可以通过为此目的创建启动器来完成,为chrome实例指定不同的用户数据目录。例如,发射器可以是/usr/bin/chromium-browser --user-data-dir="/home/user/.config/chromium-temp" --allow-file-access-from-files

上面的命令也可以在 terminal$ /usr/bin/chromium-browser --user-data-dir="/home/user/.config/chromium-temp" --allow-file-access-from-files

没有创建桌面启动器; 当铬的实例关闭时$ rm -rf /home/user/.config/chromium-temp

删除chrome实例的配置文件夹。

设置标志后,用户可以包含带rel="import"属性的元素并href指向本地文件并type设置为"application/xml",XMLHttpRequest以获取除获取文件之外的选项。访问XML document使用const doc = document.querySelector("link[rel=import]").import;

另一个替代方案,即更多涉及,将requestFileSystem用于存储文件LocalFileSystem。

看到

或者创建或修改Chrome应用程序并使用chrome.fileSystem

最简单的方法是通过肯定的用户动作提供文件上传的手段; 处理上传的文件,然后继续申请。const reader = new FileReader;const parser = new DOMParser;const startApp = function startApp(xml) {

return Promise.resolve(xml || doc)};const fileUpload = document.getElementById("fileupload");const label = document.querySelector("label[for=fileupload]");const handleAppStart = function handleStartApp(xml) {

console.log("xml document:", xml);

label.innerHTML = currentFileName + " successfully uploaded";

// do app stuff}const handleError = function handleError(err) {

console.error(err)}let doc;let currentFileName;reader.addEventListener("loadend", handleFileRead);reader.addEventListener("error", handleError);function handleFileRead(event) {

label.innerHTML = "";

currentFileName = "";

try {

doc = parser.parseFromString(reader.result, "application/xml");

fileUpload.value = "";

startApp(doc)

.then(function(data) {

handleAppStart(data)

})

.catch(handleError);

} catch (e) {

handleError(e);

}}function handleFileUpload(event) {

let file = fileUpload.files[0];

if (/xml/.test(file.type)) {

reader.readAsText(file);

currentFileName = file.name;

}}fileUpload.addEventListener("change", handleFileUpload)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值