脚本延迟不适用于 IE11

Script Defer is not working on IE11

我的 html 页面上有以下代码:

<SCRIPT type="text/javascript">
function insertScript()
{
    var sHTML="<input type=button onclick=" + "go2()" + " value='Click Me'><BR>";
    var sScript="<SCRIPT DEFER>";
    sScript = sScript + "function go2(){ alert('Hello from inserted script.') }";
    sScript = sScript + "</SCRIPT" + ">";
    ScriptDiv.innerHTML = sHTML + sScript;
}
</SCRIPT>

它工作正常并在 IE9 上显示警报,但在 IE11 上不显示。

'go2' is undefined

我在下面有这个例子link,非常感谢这方面的任何帮助:

http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/insertScript_2.htm

它似乎工作的方式是这样的

我使用 document.createElement 添加元素,并将其附加到目标元素,或者附加到 document.body 以防 targetElement 不存在

您可能会在原始代码中检查一些语法错误,但这确实有效(虽然不知道您最初尝试解决什么,但这是向页面添加脚本的糟糕方式)

而且确实没有必要 "DEFER",您可能需要等到页面加载完毕(因此请将自己附加到加载事件)

function insertScript(targetElement)
{
  var button = document.createElement('input');
  button.setAttribute('type', 'button');
  button.setAttribute('onclick', 'go2()');
  button.value = 'Click me';
  
  var sScript= document.createElement('script');
  sScript.innerHTML = "function go2(){ alert('Hello from inserted script.'); }";
  
  (targetElement || document.body).appendChild(button);
  (targetElement || document.body).appendChild(sScript);
}

insertScript(document.getElementById('target'));
<div id="target"></div>

您需要将您的 java 脚本代码移动到 .js 文件,然后使用 src 属性包含该文件,然后这将起作用。

例如将 java 脚本代码移动到 test.js 然后包含如下文件。

<script defer src="\Test.js">

这是 IE 11 中使用 defer 属性的约定。如果脚本标签中没有 src 属性,Defer 不能 运行。