当前位置: 首页 > 面试题库 >

在没有Web服务器的情况下使用Javascript加载本地文件

公冶谦
2023-03-14
问题内容

我需要编写一个使用HTML5和canvas的软件。

整个软件应该能够在本地运行,而不需要服务器。所以我只能使用Javascript,不能使用php。

困难的部分:我必须动态获取操作期间所需的文本文件的内容。

例如:当软件启动时,我需要“ config.json”。在用户做出一些选择之后,我需要“ story1.txt”或“ story2.txt”,依此类推。

我的问题:

我不能使用Ajax,因为Chrome会阻止它-不允许本地文件提取其他文件的内容。我总是收到一条错误消息。

到目前为止,我已经尝试过:

  • 使用Ajax和jQuery加载文件

Chrome浏览器不允许我加载文件

  • 将文件加载到脚本标签中

即使我将JSON文件声明为js代码,我也无法访问已加载文件的内容

  • 将文件加载到不可见的iframe中,并读取其内容

正在加载作品,我可以看到代码。但是,当我尝试访问IFrame的内容时,我再次收到Chrome错误消息

    "Uncaught SecurityError: Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match."

题:

有没有办法动态加载文本文件,还是我被迫使用Web服务器?


问题答案:

如果您坚持使用Chrome,则它具有一些命令行标志,以允许访问本地原始文件(--allow-file-access-from-files/
--disable-web- security)。请注意,您需要使用这些标志从头开始运行整个浏览器-即,如果已经有其他Chrome窗口打开标志,则不会有任何效果,并且该效果会在所有窗口中持续存在,直到关闭Chrome,这显然是一个巨大的漏洞。安全。

如果将“应用程序”与某种自动安装脚本打包在一起,则可以设置轻量级本地服务器。这仍然不是很好,因为由于限制,您需要安装用户可能不希望甚至完全无法安装的可执行文件。

您可以将基于HTML / JS的应用打包为Chrome扩展程序-扩展程序具有比随机代码更大的权限,但是您需要通过Google
Play分发它,或提供说明为用户手动安装扩展程序。

最后,您可以格式化所有数据,包括您提到的有效JavaScript代码的配置和文本文件-即打包story1.txtstory1.js

var myapp.story1 = "Complete text of story1.txt"

然后从相应的变量中动态选择所需的内容,甚至使用DOM操作通过动态添加<script>标签仅加载所需的脚本。在我看来,这是最好的选择,因为它具有较低的侵入性:它不需要任何安装/重新配置,它可以直接使用。



 类似资料:
  • 问题内容: 根据caniuse,MicrosoftEdge版本10547+支持element的属性,但IE或Safari不支持。 如何在不使用具有属性集的元素或服务器的情况下下载文件对象? 问题答案: 有多种触发下载的方法。以下是一些: 使用表格: 使用javascript:

  • 我正在玩grpc 有人成功使用进行生产吗?我们需要包括特使在内的所有依赖项吗?

  • 我有一个Spring boot项目,它有使用kafka进行日志记录的依赖项。我无法摆脱所述依赖项,因为我的逻辑需要来自该依赖项的代码 我已尝试禁用自动配置 我尝试通过bean配置将missingTopicsFatal设置为false 但很明显,设置已经是假的,因为我的应用程序运行时没有失败,只是tomcat不想打开侦听端口 应用程序启动,但spring拒绝打开侦听端口,并继续使用错误进行循环 在本

  • 问题内容: 我正在寻找没有浏览器的Javascript编程。我想从Linux或MacOSX命令行运行脚本,就像我们运行任何其他脚本语言(ruby,PHP,Perl,Python …)一样 我研究了spider monkey(Mozilla)和v8(Google),但它们似乎都是嵌入式的。 是否有人将Javascript作为脚本语言从命令行执行? 如果有人好奇,为什么我期待到这一点,我一直在关注着N

  • 我正在尝试在运行时重新加载应用程序的配置。配置位于yaml文件中,与ConfigurationProperties的绑定按预期工作。接下来就是。我想在yaml更改后重新加载配置。或者更确切地说,我正在使用预定的检查文件是否已更改。 我希望避免运行第二台服务器来更新我的环境。我有两个问题: 如何更新环境,也许? 我如何传播这些? Spring云配置文档说明: 只要您能够实际更改环境并发布事件,Env

  • 问题内容: 我正在学习d3。有某些方法可以在d3 js 中加载数据。但是他们似乎都进行了HTTP GET。在我的场景中,我已经在字符串中包含了json数据。如何使用此字符串代替发出另一个http请求?我试图为此寻找文档,但没有找到。 这有效: 现在,如果我有: 如何在d3中使用已计算的“ myjson”并避免对服务器的异步调用?谢谢。 问题答案: 只需将通话替换为 IE浏览器: 更新09/2013