我已经在一个单独的文件中构建了一个简单的html页面,其中包含javascript,只需按一下按钮即可。
我已经在chrome中打开了html文件,其路径类似于:file:///home/tom/projects/index.html
javascript需要使用硬编码路径读取同一目录中的JSON文件(file:///home/tom/projects/mydata.json)。
我真的很努力做到这一点。据我了解,这是因为我正在使用客户端js(例如,我不能使用file:///home/to....
库),这限制了我的选择。
根据问题here,如果我使用以下格式的URL,则无法加载文件:var selectedFile = document.getElementById('input').files[0];
function readFile (file_path) {
var reader = new FileReader();
reader.readAsText(file_path);
console.log(reader.substring(0, 100));
};
,因为它给了我错误:
跨源请求仅支持以下协议方案:HTTP,数据,chrome,chrome扩展名,https。
如答案所示,如果我启动HTTP服务器,则可以使用服务器端模块,但如果可能的话,我希望避免这种情况。
我注意到许多答案都建议使用类似this的对话框:
file:///home/tom/projects/mydata.json
但是我无法使用以下格式的路径进行操作:file:///home/to....
有没有一种方法可以使用客户端JavaScript从{{1}}格式的URL加载带有硬编码路径的.json文件(即不要求用户从选择框中选择文件)?
答案 0 :(得分:1)
这是蓄意的安全限制,以阻止用户进入然后打开HTML页面,然后尝试读取其磁盘。
在网络服务器上运行页面(如该问题所建议),然后您可以使用JavaScript从URL(例如http://localhost/projects/mydata.json
之类的JSON中加载),也可以使用服务器端语言来获取并显示它在呈现的HTML中。无论哪种方法都可以,第一种方法可能更简单并且最接近您现在所拥有的。
从HTTP服务器为HTML页面提供服务总是要好得多。