在innerHTML

时间:2018-06-08 22:51:45

标签: javascript

在这里遭到斥责后,我试图从头开始重新编码。我需要为一个显示在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);

在我花了几天时间试图找出问题的解决方案之后,我真的迷失了!我觉得找到这个问题的简单解决方案并不困难。希望我不会在这里咆哮错误的树...提前谢谢。

2 个答案:

答案 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启动它以使它实际工作,然后用克隆的元素替换原始脚本元素。