IE9 js порядок загрузки и JQuery - PullRequest
3 голосов
/ 03 ноября 2011

Кажется, что эту проблему легко решить, но она мне не по зубам.

Следующий простой пример приводит к ошибке в IE9.Я использовал страницу разработчика IE9 для мониторинга загрузки сети, и похоже, что IE загружает и выполняет сценарий тела перед загрузкой / оценкой включенного javascript.

Я испробовал все различные приемы, найденные с помощью поискаответы, включая добавление <meta charset="UTF-8" /> и <meta http-equiv="x-ua-compatible" content="IE8"/>

<code><html>
<head>
  <title>Demo of IE suckiness</title>
  <script type='text/javascript' 
      src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js'></script>
  </head>
  <body>
This works in every browser but not IE9. IE gives the error:
<pre>
Line: 9
Error: The value of the property '$' is null or undefined, not a Function object

Ответы [ 4 ]

3 голосов
/ 10 декабря 2012

Насколько я мог судить, IE9 запускает $ .load () только тогда, когда весь документ (включая все изображения и другие материалы) был загружен.Ужасно, но верно!Мой обходной путь для этого:

            var docReady = {
                actions:new Array(),
                flag:0,
                time:0,
                period:10,
                trigger:function() {this.flag=1},
                checkHandle:0,
                check:function() {
                    this.time+=this.period;
                    if(this.flag) {
                        clearInterval(this.checkHandle);
                        for(i in this.actions) {this.actions[i]();}
                    }
                },
                watch:function() {
                    this.checkHandle = setInterval(function() {docReady.check();},this.period);
                },
                action:function(f) {
                    this.actions.push(f);
                }

            };

            docReady.watch();

Действительно грязный, но он работает;теперь, когда вы считаете нужным, вы можете вызвать docReady.trigger (), и вы должны сделать это по крайней мере в конце страницы.Кроме того, вы можете назвать это как нагрузка на тело.Гарантируется, что функции, которые вы добавили с помощью docReady.action (), будут запускаться только один раз: при первом срабатывании триггера ().

2 голосов
/ 03 ноября 2011

У меня была похожая проблема. Я исправил это , сбросив все мои настройки IE9 .
Я думаю, что, включив безопасность или конфиденциальность, он может прервать загрузку jquery с внешней страницы.

0 голосов
/ 04 июля 2012

У меня была та же проблема, и я решил ее, НЕ используя размещенный в Google jQuery и размещая его локально.

0 голосов
/ 03 ноября 2011

Вы пытались пропустить defer="defer"?

...