Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在innerHTML中加载脚本_Javascript - Fatal编程技术网

Javascript 在innerHTML中加载脚本

Javascript 在innerHTML中加载脚本,javascript,Javascript,在这里受到指责后,我试图从头开始重新编码。我需要有一个JS文件加载的HTML文件出现在一个div <script type="text/javascript"> function getInclude(strIncludeContainer, strIncludeURL) { var strPage = ''; var intIndexOfBodyOpen = 0; var intIndexOfBodyClose = 0; var objXhttp; objXh

在这里受到指责后,我试图从头开始重新编码。我需要有一个JS文件加载的HTML文件出现在一个div

<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>

在花了几天的时间试图找出解决问题的方法之后,我真的对这个问题感到迷茫!我觉得找到解决这个问题的简单方法应该不会这么难。希望我不是找错人了。。。提前谢谢

加载脚本文件的正确方法是创建
script
元素

var script = document.createElement("script");
script.src = "../resource/resmgr/scripts/unified_app.js";
document.head.appendChild(script);

使用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]);
}
var includeContainer=document.getElementById(strIncludeContainer);
includeContainer.innerHTML=strPage.substring(intIndexOfBodyOpen+6,intIndexOfBodyClose);
var scripts=includeContainer.getElementsByTagName(“脚本”);
对于(var i=0;i

这基本上只是从容器中克隆每个脚本元素,显然是由
document.createElement
启动的,因此它实际上可以工作,然后用克隆的脚本元素替换原始脚本元素。

感谢您的帮助。我更改了上面的代码,以反映我对您建议的理解。不幸的是,这仍然不起作用:(我认为无法访问的代码消息与我的代码无关。该错误的重要部分是“
ReferenceError:$container not defined
”。请改用
document.head
。我不确定为什么只有在使用动态加载时才会出现警告。但您可能需要查看此页面:其中显示了常见原因。
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]);
}