Script Defer不适用于IE11

时间:2016-01-15 14:36:24

标签: javascript internet-explorer-11

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

2 个答案:

答案 0 :(得分:2)

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

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

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

这是IE 11中使用defer属性的惯例。在脚本标记中,Defer无法在没有src属性的情况下运行。

答案 1 :(得分:1)

它似乎有用的方式,就像这样

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

您可能会在原始代码中检查一些语法错误,但这样做(不知道您最初尝试解决的问题,这是向页面添加脚本的一种可怕方式)

并且确实不需要“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>