V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
cat
V2EX  ›  问与答

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

  •  1
     
  •   cat · Sep 3, 2020 · 2775 views
    This topic created in 2068 days ago, the information mentioned may be changed or developed.

    比如有一个 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,希望在本地直接打开页面展示数据结果

    13 replies    2020-09-03 18:05:15 +08:00
    johnnyNg
        1
    johnnyNg  
       Sep 3, 2020
    把 data.json 改成 data.js 吧,引入 js 文件
    cat
        2
    cat  
    OP
       Sep 3, 2020
    @johnnyNg 谢谢,但页面上有其它类型的文件需要动态加载,并且是由第三方插件加载的,无法这样搞,还有其它方法吗
    pinews
        3
    pinews  
       Sep 3, 2020
    html 可以默认加载图片和视频,可以运行 js 文件

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

    比如我自己是偷偷往目录里扔了个 node.exe ,然后说不需要部署只需要运行一个 bat 就行,那个 bat 里实际上是调用 node.exe 在当前目录起了个静态服务器然后打开了 chrome……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2354 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 05:49 · PVG 13:49 · LAX 22:49 · JFK 01:49
    ♥ Do have faith in what you're doing.