关于javascript:Js / jQuery包含在IE中不起作用的功能

Js/jQuery include function not working in IE

我有以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function includeJSLib(lib, id, callback) {
if (!document.getElementById(id)) {
    var s = document.createElement('script');
    s.setAttribute('id', id);
    s.setAttribute('async', 'false');
    s.setAttribute('type', 'text/javascript');
    s.src = lib;
    document.getElementsByTagName('head')[0].appendChild(s);
    s.onload = callback;
} else {
    callback();
}
}
includeJSLib('https://code.jquery.com/jquery-1.11.3.min.js', 'jqueryInclude', function(){
jQuery(document).ready( function($) {
    if ($('body').hasClass('class')) { do something }
});
});

它将加载jquery。在回调函数中有一些自定义代码。自定义代码在Firefox和Chrome中可以正常工作,但在IE中不行。

Internet Explorer完全忽略代码段。在IE 10/11中测试。

有人知道问题可能是什么吗?

谢谢和问候,诺克斯

另外,IE调试器什么也没说,它只是跳过代码片段。我必须以这种方式包括jquery(最好不要问:p)


对于ie而不是onload,使用onreadystatechange

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function includeJSLib(lib, id, callback) {
  if (!document.getElementById(id)) {
    var s = document.createElement('script');
    s.setAttribute('id', id);
    s.setAttribute('async', 'false');
    s.setAttribute('type', 'text/javascript');
    s.src = lib;
    document.getElementsByTagName('head')[0].appendChild(s);
    var loaded = false;
    s.onload = s.onreadystatechange = function() {
      var readyState = this.readyState || 'complete';
      if (!loaded && ('loaded' === readyState || 'complete' === readyState)) {
        loaded = true;
        // Handle memory leak in IE
        s.onload = s.onreadystatechange = null;
        s.parentNode.removeChild(s);
        callback();
      }
    };
    // s.onload = callback;
  } else {
    callback();
  }
}
includeJSLib('https://code.jquery.com/jquery-1.11.3.min.js', 'jqueryInclude', function() {
  jQuery(document).ready( function($) {
    if ($('body').hasClass('class')) { do something }
  });
});