gpt4 book ai didi

javascript - 我可以使用 JavaScript 更改 HTML 文档访问的 JavaScript 文件吗?

转载 作者:行者123 更新时间:2023-11-28 01:38:29 25 4
gpt4 key购买 nike

我正在尝试编写一个向用户询问一系列问题的 HTML 页面。这些问题的答案由我的 JavaScript 代码评估,并用于确定用户需要访问哪个额外的 JavaScript 文件。然后我的代码将额外的 JavaScript 文件添加到我的 HTML 页面的 head 标记中。我不想将代码合并到一个 JavaScript 文件中,因为这些额外的文件足够大,如果它们放在一起就会成为一场噩梦,而且我不想在页面首次加载时将它们全部添加到头部,因为我会有太多的变量冲突。我不愿意为每本词典重定向到一个新网页,因为这会产生大量冗余编码。我没有使用任何库。

我从以下 HTML 代码开始:

<head>
<link rel="stylesheet" type="text/css" href="main.css">
<script src="firstSheet.js" type="text/JavaScript"></script>
</head>
//Lots of HTML.
<div id="mainUserMenu">
</div>

我有以下 JavaScript 函数:

function thirdLevelQuestions(secondLevelAnswer) {
//Code here to calculate the variables. This part works.
activeDictionary = firstKey + secondKey + '.js';
//Changing the HTML header to load the correct dictionary.
document.head.innerHTML = '<link rel="stylesheet" type="text/css" href="main.css"><script src="' + activeDictionary + '" type="text/JavaScript"></script><script src="firstSheet.js" type="text/JavaScript"></script>';
//for loop to generate the next level of buttons.
for (var i = 0; i < availableOptions.length; i++) {
document.getElementById('mainUserMenu').innerHTML += '<button onclick="fourthLevelQuestions(' + i + ')">' + availableOptions[i] + '</button>';
}

这会创建我想要的按钮,当我检查 head 元素时,我可以在那里看到两个 JavaScript 文件。当我单击此级别的任何按钮时,它们应该调用第二个文件中的函数。相反,Chrome 告诉我“Uncaught ReferenceError: fourthLevelQuestions is not defined”(html:1)。如果我将代码粘贴回 firstSheet.js,该函数可以正常工作,所以我认为问题是我的 HTML 文档实际上并未访问 activeDictionary 文件。有办法做到这一点吗?

最佳答案

可以做什么

您正在尝试按需加载 Javascript。最近这是一个经过深思熟虑的问题,大多数 native 解决方案在 bowser 实现中效果不佳。检查一项研究here不同的解决方案和问题的背景解释得很好。

对于大型 Web 应用程序,解决方案是使用一些有助于模块化代码并使用一些脚本加载器按需加载它们的 javascript 库。重点是模块化代码,而不仅仅是脚本加载。检查一些库 here .还有一些更重的,包括像 MVC 这样的架构。

如果您使用 AJAX使用正确的 dataType 实现 jQuery jQuery 将帮助您评估 脚本,它们以处理浏览器差异而闻名。也可以看看独家getScript()这确实是使用 dataType script 的 AJAX 的简写。 请记住,使用 native AJAX 加载脚本并不能保证对包含的 javascript 进行评估,jQuery 在处理阶段 内部进行评估。

怎么了

您上面所做的可能适用于大多数现代浏览器(不确定),但您的代码中存在一个本质缺陷。您正在使用 innerHTML 将脚本标签添加到您的头部,它将这些行插入到您的 HTML 中。即使您的浏览器加载脚本需要网络延迟时间,我们称之为异步加载,您也不能立即使用该脚本。那你怎么办?在脚本就绪加载 时使用脚本。令人惊讶的是,您有一个事件,只需使用它。可以是这样的:

   var head= document.getElementsByTagName('head')[0];
var script= document.createElement('script');
script.type= 'text/javascript';
script.onreadystatechange= function () {
if (this.readyState == 'complete') helper();
}
script.onload= helper;
script.src= 'helper.js';
head.appendChild(script);

检查 this article在不使用外部库的情况下寻求实现帮助

从变量名 activeDictionary 如果我猜你正在加载一些 数据集 而不是 javascript 程序,你应该尝试查看JSON 并动态加载和使用它们。

如果this Question/Answer满足您的需求,您应该删除您的问题以避免在 SO 中重复输入。

关于javascript - 我可以使用 JavaScript 更改 HTML 文档访问的 JavaScript 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27245273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com