Javascript 在innerHTML中加载脚本
在这里受到指责后,我试图从头开始重新编码。我需要有一个JS文件加载的HTML文件出现在一个divJavascript 在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
<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]);
}