JavaScript 中动态加载的问题

2023-12-07

我是一名 JavaScript 新手,通过工作来学习pure计算数学函数的 JavaScript“项目”。一切都运转良好。现在,作为进一步的一步,我想让消息传递多语言。该代码应该能够在运行时加载适当的语言文件。对于动态加载问题,我在网页上阅读并找到了解决方案,例如this one.

在编写动态代码之前,我静态加载了它,测试代码运行良好。我寻求帮助的代码只是加载“脚本”元素的细微差别。

我遇到问题的代码是this.getString功能,无法访问de语言文件中的元素。在行console.log(eval(语言,标签));,我收到错误消息“未捕获的引用错误:de 未定义".

//File: Utils/Lang/js/FileUtils.js
function Language(language) {
    var __construct = function(dynamicLoad) {
        if (typeof language == 'undefined') {
            language = "en";
        }
        // Load the proper language file:
        loadFile("js/resources/lang.de.js");
        return;
    } ()

    this.getString = function(tag, strDefault) {
        console.log("getString(" + tag + ", " + strDefault + "): ");
        console.log("getString(...): document = " + document);
        console.log("getString(...): eval(" + language + ", " + tag + ") = ");
        console.log(eval(language, tag));
        var strReturn = eval('eval(language).' + tag);

        if (typeof strReturn != 'undefined') {
            return strReturn;
        } else {
            return (typeof strDefault != 'undefined') 
                ? strDefault
                    : eval('en.' + tag);
        }
    }
}

不包括有效的静态测试代码,我可以在其中访问 de 元素。

我的问题:如何正确加载语言文件,以便de标签可以访问吗?

感谢您的帮助!

 //File: Utils/Files/js/FileUtils.js
 function loadFile(filepathname) {
     var reference = document.createElement('script');

     reference.setAttribute("type", "text/javascript");
     reference.setAttribute("src", filepathname);

     if (typeof reference != 'undefined') {
       document.getElementsByTagName("head")[0].appendChild(reference);
     }
     console.log("loadFile(\"" + filepathname + "\"): document = " + document);
   }
 //File: Utils/Lang/js/resources/lang.de.js:
 de = {
   pleaseWait: "Bitte warten..."
 };

 //File: Utils/Lang/js/resources/lang.en.js
 en = {
   pleaseWait: "Please wait..."
 };

 //File: Utils/Lang/js/TestLanguage.js:
 function output() {
   console.log("output()");
   var codes = ['de', 'en'];

   for (var i = 0; i < codes.length; i++) {
     var translator = new Language(codes[i]);

     var message = "output(): in " + translator.getLanguage() + ": ";

     message += translator.getString('pleaseWait');

     console.log(message);
   }
 }
<!--File: Utils/Lang/TestLang.html:-->
<!DOCTYPE html>
<html>

<head>
  <meta charset="ISO-8859-1">
  <title>Test languages</title>
  <script type="text/javascript" src="../Files/js/FileUtils.js"></script>

  <script type="text/javascript" src="js/Language.js"></script>
  <script type="text/javascript" src="js/TestLanguage.js"></script>
</head>

<body>
  <button name="outputButton" onclick="output();">Click</button>
  <br>Please press [F12] so that you can see the test results.
</body>

</html>

当您将脚本标记添加到文档时,它不会同步加载。您需要等待文件加载后才能使用其中的代码。

您也许可以重新设计代码以使用 script.onload 回调:

var reference = document.createElement('script');
// ...
reference.onload = function() {
  alert("Script loaded and ready");
};

但对于这种情况,如果您没有很多语言字符串,您最好静态加载它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中动态加载的问题 的相关文章

随机推荐

  • 这个 double 是什么格式以及如何转换它?

    我正在阅读一个遗留的网络服务 它以我不熟悉的格式返回双精度数 一些例子是 1 58e 6 1 56e 6 1 45e 6 他们应该代表这样的双打 例如 0 000004343 这是什么格式以及如何转换 你可以这样转换 1 58e 6 1 5
  • 从给定纬度和经度的固定距离生成随机地理点

    我正在编写一个java程序来生成距给定点固定距离的所有经度和纬度 距离必须精确为 2000 公里 不能小于 2000 公里 这是我的代码 public static void getLocation double x0 double y0
  • Gradle 1.0 +Spring + AspectJ 构建问题

    我正在将一个依赖 Configurable Spring 注释的项目的 Maven 构建迁移到 Gradle 中 但是当我的 Web 应用程序运行时 没有任何 Configurable 类被注入到 Gradle 构建中 它们在构建我的 Ma
  • Java 按字母顺序排列字符串

    我有一个课堂项目 我需要输入 4 个不同的字符串 然后按字母顺序输出它们 到目前为止我有这个 String wd1 wd2 wd3 wd4 Scanner scan1 new Scanner System in System out pri
  • 核心图:如何从用户选择的栏中呈现弹出窗口

    我想完成什么 我正在使用 Core Plot 1 1 绘制条形图 我想在用户选择 点击 的条形下方显示一个弹出窗口 其中包含更多详细信息 Code 我的代码如下所示 void barPlot CPTBarPlot plot barWasSe
  • Android:设置蓝牙可发现性无限制

    在过去的几天里 我一直在尝试制作一个应用程序 让我的三星 Galaxy S3 mini Android 2 1 4 在 无限 的时间内被发现 我的代码目前如下所示 package com example downtoone import a
  • 将文件夹下载为 Zip Google Drive API

    我目前在 Google Sheet 中有一个 Google App 脚本 它为我提供了文件夹的 URL 然后我可以用它来下载 虽然这是一个额外的步骤 但我想删除它 并直接获取压缩内容的 URL 这是我的代码 谷歌应用程序脚本 functio
  • 如何在网页视图中显示外国字体

    我的应用程序必须在 Web 视图中显示 HtmlString 中的印地文文本 HtmlString div style padding 0px div div style padding 5px b SharedVariables Arra
  • 泡菜懒惰学习者

    Pickle 是否为像 KNeighborsClassifier 这样的懒惰学习者保存来自 scikit 的训练数据 如果是这样 我们可以从 pickle 对象访问这些数据吗 询问数据隐私问题 Eg knn fit Xtrain Ytrai
  • AMP 错误:缺少支持的结构化数据元素

    我有一个书籍聚合网站 我为每本书创建了专用的 AMP 加速移动页面 示例 AMP 网址 http konyvar hu amp nicholas sparks az utolso dal 规范 URL 示例 http konyvar hu
  • 如何保持元素:即使点击后仍处于活动状态

    从中得到了非常模糊和不需要的答案question所以我决定发布一个明确的问题来介绍我面临的问题 我正在使用的代码如下所示 flipClass font size Large background color 4399CD color fff
  • 在函数内执行 mysqli_query

    我有一个函数列表函数 php 我正在升级Mysql to Mysqli因为我刚刚学习Mysql现已弃用 我在顶级connect php 文件中声明我的连接 第一个文件是必需的 我所有的功能都使用mysql query QUERY 总是运行良
  • Telegram Api - 创建授权密钥 404 错误

    我正在尝试用 python 编写一个简单的程序来使用 telegram api 不是机器人 api 主要消息传递 api 现在我已经编写了这段代码 usr bin env python import socket import random
  • ASP.NET 自定义用户控件动态添加

    我很难将具有自定义用户控件的页面直接修改为 ASPX 页面 现在需要仅在需要时动态加载它 用户控件确实通过 ASCX 文件具有 html 和其他控件 并且在代码隐藏中具有代码 我已阅读多页 发现我无法直接实例化用户控件 但应该使用Page
  • Ubuntu 上的 Boost::system 链接错误

    我正在尝试编译以下实现上下文树切换的 C 代码 下载页面上有更多信息 Zip 存档 0 2 MB 这需要一些boost库 我从 boost org 下载了最新版本 并按照网站上的说明构建了所有需要构建的库 我还修改了存档中包含的 makef
  • 配置 emacs 以显示固定宽度的内嵌图像

    跟进 Emacs 组织显示内联图像 我按照 abo abo 的建议设法显示内联图像 现在我想为它们设置一个固定的宽度大小 设置 setq org image actual width 50 不起作用 Emacs 选择了该变量 但它没有对图像
  • 设置 ggplot 标题以反映 dplyr 分组

    我在 dplyr 中生成了一个分组数据框 其中每个组反映了因子变量水平的独特组合 我想使用类似的代码绘制不同的组this邮政 然而 我不知道如何在我的图的标题中包含两个 或更多 变量 这很麻烦 因为我有一堆不同的组合 假数据和绘图代码 li
  • scanf("%*[\n] %[^\n]", input_string); 是什么意思?做?

    我无法理解其中的区别 我用 n s 用于获取用户输入的短语 但当我需要添加两个短语时 这不起作用 但上面那个却做到了 请帮助我理解其中的区别 The n 指令告诉scanf 匹配换行符 以及 flag 表示不应进行任何分配 因此 n 跳过任
  • 使用intelliJ调试android中的后台服务

    我最近从 eclipse 切换到 IntelliJ 进行 Android 开发 由于更好的团队支持 项目 模块 但是 当我尝试调试后台服务时 似乎这是不可能做到的 有人成功让 IntelliJ 调试 bg 服务吗 非常感谢 本 有两种方法可
  • JavaScript 中动态加载的问题

    我是一名 JavaScript 新手 通过工作来学习pure计算数学函数的 JavaScript 项目 一切都运转良好 现在 作为进一步的一步 我想让消息传递多语言 该代码应该能够在运行时加载适当的语言文件 对于动态加载问题 我在网页上阅读