【问题标题】:HTML file and Javascript file with AJAX do not work with each other带有 AJAX 的 HTML 文件和 Javascript 文件不能相互配合
【发布时间】:2020-10-08 00:27:27
【问题描述】:

七年来,我一直在编写供离线和私人使用的小型网站。这些项目中的每一个都包含一个 html 文件,链接到一个 css 文件和一个 javascript 文件。后者使用 AJAX 从 .txt 文件中加载内容,并在 html 网站上灵活显示。文件(.html、.css、.js、.txt)位于本地硬盘上的同一文件夹中,我在浏览器中本地打开 html 文件。我已经成功地使用这个设置来编写自己的小百科全书、词汇培训师、游戏等。

但是,它不再起作用了。 AJAX 不加载文本文件内容。 (我知道,因为我直接在 html 文件中插入了 Javascript/AJAX 代码,它仍然不起作用。)此外,HTML 不与 .js 文件连接。 (我知道,因为我直接将文本内容作为变量插入到 Javascript 文件中,但它仍然不起作用。)只有当我结合这两个步骤(即在 html 文件中插入 Javascript 代码并将文本内容作为变量插入)时,有用。然后,除了 CSS 之外的所有内容都在一个 html 文件中。然而,这是不可行的,因为文件变得非常混乱并且几乎不可能编辑文本内容。

大约半年前,当我更新我的 Firefox 时,问题就开始了。首先,我认为浏览器已经更改了一些安全设置,以不允许 html 文件链接到 javascript。但我没有找到相应的设置。然后,我尝试使用其他浏览器。 Chrome、Edge 和旧版 IE 的反应相同。我承认我没有尝试过 Opera、Safari 和其他浏览器,但是我尝试过的已经代表了一定的品种。我尝试了不同的计算机,但我曾经成功的网站失败了。感觉就像设置从未奏效,但多年来一直完美无缺。由于此类代码是在 W3 Schools 等热门课程中教授的,因此它应该可以工作。我没有更改任何代码。因此,我想知道是否出于任何安全原因,是否已在全球范围内删除了此功能。但如果是这样,万维网最简单的流程将不再适用。显然情况并非如此。使用 AJAX 链接到 javascript 代码的简单 html 文件是 Web 编程的最基本功能之一,不是吗?因此,似乎有一个我找不到的错误或原因。

我一直在等待并尝试所有我能想到的解决方案,但似乎只有一种方法可以摆脱这个死胡同:问你,亲爱的程序员。我认为你们中的许多人比我有更多的经验,因为我只知道网页设计的非常基本的问题。如果您能想到任何原因和/或解决我的问题的方法,请告诉我,我将不胜感激。

为了便于理解,我在这里给出了在我所有项目中几乎相同的基本示例代码:

这是地址(请看最后两个字符):

file:///C:/MyProgrammes/SampleProgramme/Site.html?1

这是 Site.html 文件:

<!DOCTYPE html>
<html>

<head>
<link href="Design.css" rel="stylesheet"/>
<script src="Programme.js"></script>
</head>

<body>
<div id="ShowResult"></div>
</body>

</html>

这是 Programme.js 文件:

var List;                                           // this variable is defined globally here
var GetContent = new XMLHttpRequest();              // start of AJAX, receivinig contents of the txt file
GetContent.open('GET','Contents.txt',true);
GetContent.send();
GetContent.onreadystatechange = function () {
    if (GetContent.readyState == 4) {
        List = GetContent.responseText.split("\n");
    }
}                                                   // end of AJAX

document.getElementById('ShowResult').innerHTML = List[1];

这是 Contents.txt 文件的示例:

Grass is green.
The sky is blue.
Clouds are white.

此外,还有一个 Design.css 文件仍然可以正常工作。

现在,我希望屏幕显示“天空是蓝色的。”。它工作得很好,但现在不行了。如果您知道解决方案,请帮助我!

最好的问候,

约翰内斯

【问题讨论】:

  • AJAX 旨在通过 HTTP(S) 工作,而不是在本地文件系统上工作。我怀疑您将其作为本地文件打开是问题所在。您是否查看过浏览器的开发控制台是否有错误?
  • 您可能想对您的问题进行一些总结,只留下与获得帮助实际相关的信息(即:实际代码 + 出了什么问题)。
  • 检查 Firefox 的开发者控制台说?请包括您在问题中看到的任何错误。
  • @David:代码在本地工作了很多年。一夜之间好像出了点问题。
  • @melancia:总结是:我怎样才能让上面的代码在本地工作?它不起作用。

标签: javascript html ajax


【解决方案1】:

这看起来可能是下面引用的安全修复的结果:

https://www.mozilla.org/en-US/security/advisories/mfsa2019-21/#CVE-2019-11730

关于该主题的讨论:

https://bugzilla.mozilla.org/show_bug.cgi?id=1566051

建议您现在需要通过设置显式启用读取本地文件:

privacy.file_unique_origin preference

【讨论】:

  • 亲爱的艾伦·海,谢谢!这就是解决方案。我通过输入现有属性的名称,然后启用或禁用它,有一个用于高级设置的控制台。几个月前,我什至试图弄清楚是否有我关心的设置,但我没有找到。现在您提供了正确的解决方案。
猜你喜欢
  • 1970-01-01
  • 2016-12-08
  • 2012-12-25
  • 2012-02-19
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多