在这里遭到斥责后,我试图从头开始重新编码。我需要为一个显示在div ...
中的HTML文件加载JS文件<script type="text/javascript">
function getInclude(strIncludeContainer, strIncludeURL)
{
var strPage = '';
var intIndexOfBodyOpen = 0;
var intIndexOfBodyClose = 0;
var objXhttp;
objXhttp = new XMLHttpRequest();
objXhttp.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
strPage = this.responseText;
intIndexOfBodyOpen = strPage.indexOf('<body>');
intIndexOfBodyClose = strPage.indexOf('</body>');
document.getElementById(strIncludeContainer).innerHTML = strPage.substring(intIndexOfBodyOpen + 6, intIndexOfBodyClose);
}
};
objXhttp.open("GET", strIncludeURL, true);
objXhttp.send();
}
getInclude("divUnifiedAppWording", "../mpage/Unified_App_Wording");
var script = document.createElement("script");
script.src = "../resource/resmgr/scripts/unified_app.js";
$container.appendChild(script);
</script>
<div id="divUnifiedAppWording"></div>
函数getInclude工作正常,但我无法在unified_app.js中加载Javascript来加载。作为参考,在unified_app.js中我有以下脚本:
const date = new Date();
let offset = 0;
const threshold = new Date();
threshold.setMonth(3); //January is 0!
threshold.setDate(3);
if (Date.now() > threshold) {
offset = 1;
}
var theDate = new Date();
var award_year1 = date.getFullYear() + offset;
var award_year2 = date.getFullYear() + 1 + offset;
console.log(award_year1);
console.log(award_year2);
在我花了几天时间试图找出问题的解决方案之后,我真的迷失了!我觉得找到这个问题的简单解决方案并不困难。希望我不会在这里咆哮错误的树...提前谢谢。
答案 0 :(得分:1)
加载脚本文件的正确方法是创建script
元素。
var script = document.createElement("script");
script.src = "../resource/resmgr/scripts/unified_app.js";
document.head.appendChild(script);
答案 1 :(得分:1)
使用JavaScript附加到页面的脚本只有在明确创建时才会加载,例如使用document.createElement
。巴尔玛的答案在你的特定情况下会很好地解决这个问题,你应该尽可能地使用他的答案。否则,假设您的代码的每个其他部分都是有效的,如果您正在寻找更加动态的方法,那么如果您替换此行,它应该有效...
document.getElementById(strIncludeContainer).innerHTML = strPage.substring(intIndexOfBodyOpen + 6, intIndexOfBodyClose);
......用这些线。
var includeContainer = document.getElementById(strIncludeContainer);
includeContainer.innerHTML = strPage.substring(intIndexOfBodyOpen + 6, intIndexOfBodyClose);
var scripts = includeContainer.getElementsByTagName("script");
for(var i = 0; i < scripts.length; i++) {
var script = document.createElement("script");
if(scripts[i].text) {
script.text = scripts[i].text;
} else {
for(var j = 0; j < scripts[i].attributes.length; j++) {
if(scripts[i].attributes[j].name in HTMLScriptElement.prototype) {
script[scripts[i].attributes[j].name] = scripts[i].attributes[j].value;
}
}
}
scripts[i].parentNode.replaceChild(script, scripts[i]);
}
这基本上只是克隆了容器中的每个脚本元素,显然是使用document.createElement
启动它以使它实际工作,然后用克隆的元素替换原始脚本元素。