【发布时间】:2017-06-05 13:10:39
【问题描述】:
请告诉我,为什么本地 javascript 无法打开本地文件? 我正在尝试创建一个简单的 javascript/html 应用程序,该应用程序应从本地文件系统在本地计算机上运行。此应用正在尝试使用不同的方法读取配置文件 (json),但出现以下错误 (Chrome):
-
如果是XMLHttpRequest,方法
open("GET", filename, true)会抛出异常:XMLHttpRequest 无法加载 file:///bla-bla-bla。跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https、chrome-extension-resource。
-
如果是
document.createElement("iframe").src=filename,我还有另一个例外:VM596:1 未捕获的 DOMException:无法从 'HTMLIFrameElement' 读取 'contentDocument' 属性:阻止具有源“null”的框架访问跨域框架。”
在
var f=new File([], filename, { type: "text/plain" });的情况下,我得到了大小为零且完全没有错误的文件对象。然后 FileReader 返回一个空结果。
所以,我的问题是: 为什么是“跨域”?这些文件存储在同一目录中! 以及如何从运行脚本的同一源/目录打开本地文件? 请帮忙。
P.S.:是的,我知道 --allow-file-access-from-files,但我需要由客户运行它。
【问题讨论】:
-
file://协议对于测试或查看单个文件的用途确实非常有限。对于真正的 webapp 测试,您需要设置一个小的、基本的“web 服务器”程序,它可以接受对localhost/index.html或localhost/bla-bla-bla.js的请求。例如,Python 允许您通过命令行在当前文件夹中设置一个python -m SimpleHttpServer 80 -
@BbIKTOP,您可以将 JSON 文件转换为 javascript 文件(将
var myVariable =添加到 json 文件的开头)然后使用<script src='myfile.js'></script>包含它,数据将在myVariable(目的)。虽然不是最好的解决方案,但有效。 -
他们有超过 100 台没有 LAN,运行非常特定的软件(健身房),这个应用程序旨在显示一些广告视频剪辑。这就是为什么不可能在网络服务器上使用如此明显的解决方案的原因,这就是我在这里问这个问题的原因。当然,可以不使用 json 配置,而是将配置放入代码中,也许在单独的文件中。没什么意思,没必要在这里问也不讨论。
-
这是 chrome 做事的方式,谷歌已经声明了它,因此除了创建 Web 扩展程序之外,您无能为力...使用 firefox、edge 或 internet ex。 ..不,不要用那个!
-
使用脚本标签与 xhr 之间的部署、更新或运行时功能绝对没有区别......至于 iframe 问题,您显示的代码将毫无意义,因为您已经创建您“失去”访问权限的 iframe,因此无法将其添加到 DOM
标签: javascript ajax