脚本延迟在 IE11 上不起作用

Script Defer is not working on IE11

本文关键字:不起作用 IE11 延迟 脚本      更新时间:2023-09-26

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

我在以下链接上有这个例子,在这方面的任何帮助都非常感谢:

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

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

例如,将 Java 脚本代码移动到测试.js然后包含如下所示的文件。

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

这是 IE 11 中使用 defer 属性的约定。如果没有脚本标记中的 src 属性,则延迟无法运行。

一种似乎有效的方式,是这样的

我改用 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>