【问题标题】:How do I use a single javascript properties.js file to set variables in multiple HTML files?如何使用单个 javascript properties.js 文件在多个 HTML 文件中设置变量?
【发布时间】:2019-11-03 20:09:19
【问题描述】:

更新:这是一个内存缓存问题,Firefox 和 Chrome 在每次页面刷新时都从内存缓存中提取 properties.js 文件,而不是从服务器下载新版本。 cmets 下面的网络选项卡提示让我看到了这种行为。谢谢!

如下在 HTML 文件中使用元标记完全没有帮助:

    <meta http-equiv=“Pragma” content=”no-cache”>
    <meta http-equiv=“Expires” content=”-1″>
    <meta http-equiv=“CACHE-CONTROL” content=”NO-CACHE”>

我正在开发一个包含多个 HTML5 页面的 UI 仪表板,这些页面显示的值每隔几分钟就会发生变化。这些值来自我使用 JQ 解析然后使用 bash 更新 properties.js 文件的 API。多个 HTML5 页面 src 此 properties.js 文件为 HTML5 页面中的 JavaScript 变量赋值。

问题是,这适用于第一个 HTML5 页面,但第二个 HTML5 页面没有获取值。如果我注释掉第一页的“src”行,第二页就会得到这些值。似乎我这样做的方式仅适用于将值填充到单个 HTML5 页面中。我宁愿不克隆每个 HTML 页面的属性文件。我正在尝试找到一种方法让所有 HTML5 页面从单个 properties.js 文件中填充值。

[FILE1.HTML]


<head>
...
<script type="text/javascript" src="./properties.js"></script>
...
</head>
<body>
...
<main>
...
<div class="text-value" id="ts1_info.var1"></div>
...
<script type="text/javascript">
   document.getElementById("ts1_info.var1").innerHTML = ts1_info.var1;
</script>
...
</main>
</body>

[FILE2.HTML]

<head>
...
<script type="text/javascript" src="./properties.js"></script>
...
</head>
<body>
...
<main>
...
<div class="text-value" id="ts1_info.var1"></div>
...
<script type="text/javascript">
   document.getElementById("ts1_info.var1").innerHTML = ts1_info.var1;
</script>
...
</main>
</body>

[PROPERTIES.JS]

var ts1_info;
ts1_info = {
    var1: "my_value",
    ...
;

[文件层次结构]


page1.html
      |
      |_ page2.html
      |_ properties.js

在 page1.html 中,src 行会下降 1 级:

<script type="text/javascript" src="./sub_directory/properties.js"></script>

在 page2.html 中 src 行将进入同一级别:


<script type="text/javascript" src="./properties.js"></script>

【问题讨论】:

  • 导入 js 文件应该适用于任何数量的 html 页面。当您单击从一页到下一页的链接时是否会出现问题,或者即使您直接转到第二页,变量也将不可用?
  • 当我在 FILE1.HTML 中使用与在 FILE2.HTML 中相同的代码为变量赋值时,它适用于第一个文件,但第二个文件中的值仍然为空。我正在使用的一个工作循环是将properties.js 克隆为另一个名称,如properties2.js。当 page2.html 在 src 行中具有唯一的文件名时,一切正常。只有当我在多个 html 文件中的 src 行中使用“相同”文件名时才会出现问题。
  • 我的理解是您正在尝试从 FILE1.html 设置 properties.js 中的变量并在 FILE2.html 中访问这些设置值。如果那是你想要做的,它不会起作用。
  • 不,这不是我想要的。我正在做的是使用 bash/jq/APIs 创建单个 JavaScript 文件,其中包含多个键值对,多个 HTML5 页面将使用这些键值对来为变量赋值。 bash/jq/API 每分钟运行一次并更新 properties.js 文件中的值,这反过来又会在页面刷新时反映 HTML5 页面中的更新值。
  • 嗯...是的,这对我来说没有任何意义,为什么这不起作用。检查 devtools 中的 Network 选项卡,看看第二个页面是否正在接收文件。

标签: javascript html variables src


【解决方案1】:

尝试将变量存储在您希望跨其他页面访问的本地存储中。本地存储允许在 Web 浏览器中保存键/值对,因此当一个页面更新变量时,它也可以用于另一个页面。

【讨论】:

  • 本地存储依赖于浏览器并允许数据持久化。 properties.js 中的值每分钟从 cron 作业 wget'ing API 数据更新,用 JQ 解析它,然后使用 Bash 将值推送到 properties.js 文件。我宁愿将 properties.js 文件保留为HTML 内容的单一事实来源,不添加本地存储层。
【解决方案2】:

您通常不使用 .在链接到脚本文件的路径中,试试

<script type="text/javascript" src="sub_directory/properties.js"></script>

<script type="text/javascript" src="properties.js"></script>

它适用于不同的文件名,但不是同一个文件名,这真的没有意义。

【讨论】:

    【解决方案3】:

    这似乎是浏览器缓存问题。我需要弄清楚如何强制 Chrome 和 Firefox 在每次页面刷新时重新下载 properties.js 文件,而不是从缓存中获取。

    【讨论】:

    • 然后构建一个 JavaScript 应用程序来轮询 api 而不是包含 js 文件来获取数据。
    • 同意。通过 xhr 轮询或通过 Web 套接字接收更新是理想的选择。
    • 我也同意,但是,这是我的第一个繁重的 JavaScript 项目,并且截止日期不允许重新设计(以及学习新的东西,比如在纯 JavaScript 中轮询和解析 API)。我将研究你们为下一个版本推荐的更好的方法。非常感谢!
    • 本帖回答浏览器内存缓存问题:stackoverflow.com/questions/118884/…
    【解决方案4】:

    当我想防止我的脚本被缓存时,我想做的事情是在文件路径的末尾添加一个参数,如下所示:scripts.js?v=0001 或者在我的 php 项目中,我使用 npm 添加一个 uuid 到每次更新时文件名的结尾。

    您可以在这里查看更多信息:How to Prevent Caching of Javascript

    只是想为您指明正确的方向!希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多