chrome 浏览器能否让本地的 html 通过 ajax 加载本地文件?

2020-09-03 09:55:34 +08:00
 cat

比如有一个 index.html 文件,其中有一段代码是 fetch('data.json') 加载同目录的 data.json 文件;

chrome 直接打开这个 index.html (不使用 nginx 或其它 http server ),会加载失败:

Fetch API cannot load file:/// URL scheme must be "http" or "https" for CORS

改成 XMLHttpRequest 方式加载也是类似的错误;

还有什么办法可以加载本地文件吗,客户不想部署 http server,希望在本地直接打开页面展示数据结果

2100 次点击
所在节点    问与答
13 条回复
johnnyNg
2020-09-03 10:03:00 +08:00
把 data.json 改成 data.js 吧,引入 js 文件
cat
2020-09-03 10:07:22 +08:00
@johnnyNg 谢谢,但页面上有其它类型的文件需要动态加载,并且是由第三方插件加载的,无法这样搞,还有其它方法吗
pinews
2020-09-03 10:09:40 +08:00
html 可以默认加载图片和视频,可以运行 js 文件

其他文件都必须用户亲自操作(即用户许可)才能运行。
johnnyNg
2020-09-03 10:14:10 +08:00
@cat Electron 走起
cat
2020-09-03 10:18:47 +08:00
@johnnyNg 😂 果然只能 electron 了吗
cat
2020-09-03 10:20:07 +08:00
@pinews 需要加载的其它类型文件 本质上也是一串文本,我看看能不能一起搞到 js 里…
Sapp
2020-09-03 10:20:23 +08:00
chrome 要是给你这个权限怎么保证安全? 这明显是不可能给你的权限啊,不然你瞎读客户文件上传。
要么你让用户自己选择文件加载,然后你读取他选择的文件,要么 electron,什么权限都能自己搞。
cat
2020-09-03 10:29:35 +08:00
@Sapp 以 file:// 协议打开的本地文件,和互联网上的网页不能相提并论。
pinews
2020-09-03 10:45:31 +08:00
@cat 别想了,道理是一样的,都需要许可,本地 js 文件之所以能运行,是这个行为得到了用户逻辑上的许可。
phy25
2020-09-03 11:25:36 +08:00
isDebug
2020-09-03 11:26:19 +08:00
你这是 mock 吗 直接用 js import 吧
imn1
2020-09-03 12:12:22 +08:00
本地的话也没必要 ajax,写入 html 文件里面就行了
或者自己写个程序,内置 webkit,如 pyqt 做这个就几行代码而已
miaowm5
2020-09-03 18:05:15 +08:00
如果客户不想部署 http server 只是因为嫌麻烦,那直接写一个单文件无配置的静态文件服务器呢?

比如我自己是偷偷往目录里扔了个 node.exe ,然后说不需要部署只需要运行一个 bat 就行,那个 bat 里实际上是调用 node.exe 在当前目录起了个静态服务器然后打开了 chrome……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/703762

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX